はじめに
Mojo🔥は、Pythonの上位互換という話で、とても速いということでニュースになっていました。ニュースからしばらく経過して、簡単に触れるようになってきたので、実際に体験してみたいということで触ってみた備忘録となります。
インストール
- 環境:Windows WSL2 - Ubuntu 22.04.2 LTS
参照させていただいたいくつかのページをみるとおり、とても簡単。
公式で Windows WSL2でのやり方もでています。
Modular CLIのインストール
curl https://get.modular.com | sh - && \
modular auth mut_166cde5cb99f4247a1e2fae9f0228a9e
インストール
modular install mojo
以下のようなエラーになるので、指示どおり python3.10-venvをインストール
再チャレンジで完了。指示どおり、パス設定。
mojoをたたくと、Welocom to Mojoがでてきました。
Hello World
printとそのまま書くのではなく、fn main(): を記載するのが特徴
fn main():
print("Hello mojo World!")
比較プログラム
PythonとMojoで素数を求めるプログラムで比較してみたいと思います。
- python 3.10.12
- mojo 0.7.0
速度の比較というと「素数」を求める、みたいな感じに数学素人はなってしまいます。ということで、1~3,000,000の間の数字で素数を求め、それにかかった時間を見てみたいと思います。
こういうケースに、ChatGPTやCopilotはめちゃくちゃ便利です。一瞬でサンプルプログラムを作成くれ、ちょっとだけ修正。素数の数もカウントします。
import time
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
# スタート
print("start")
start_time = time.time()
num_primes = 0
for i in range(1, 3000000):
if is_prime(i):
num_primes += 1
end_time = time.time()
proc_time = end_time - start_time
print("素数の数: ", num_primes)
print("かかった秒数: ", proc_time)
Mojoに関しては最近の言語のため、ChatGPTへの指示は、うまくやらないとでてない&でてきたサンプルでは、ちょこちょこ間違いがありました。("pythonに似たmojoという言語で~"、という感じで指示とすると、まぁまぁのものが返ってきました)
from time import now
fn is_prime(n: Int) -> Bool:
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
fn main():
print("start")
let start_time = now()
var num_primes = 0
for i in range(1, 3000000):
if is_prime(i):
num_primes += 1
let end_time = now()
let proc_time = end_time - start_time
let seconds = proc_time / 1000 / 1000 / 1000
print("素数の数: ", num_primes)
print("かかった秒数: ", seconds)
比較結果
私の環境下では以下のようになり、とても速いということを体感できました。
#py
start
素数の数: 216816
かかった秒数: 10.494363069534302
#mojo
start
素数の数: 216816
かかった秒数: 0.526632353
参照URL