3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MojoのインストールとPythonとの速度比較

Last updated at Posted at 2024-01-30

はじめに

Mojo🔥は、Pythonの上位互換という話で、とても速いということでニュースになっていました。ニュースからしばらく経過して、簡単に触れるようになってきたので、実際に体験してみたいということで触ってみた備忘録となります。

インストール

  • 環境:Windows WSL2 - Ubuntu 22.04.2 LTS

参照させていただいたいくつかのページをみるとおり、とても簡単。
公式で Windows WSL2でのやり方もでています。

001.png

002.png

Modular CLIのインストール

Ubuntu
curl https://get.modular.com | sh - && \
modular auth mut_166cde5cb99f4247a1e2fae9f0228a9e

003.png

インストール

Ubuntu
modular install mojo

以下のようなエラーになるので、指示どおり python3.10-venvをインストール

004.png

再チャレンジで完了。指示どおり、パス設定。

005.png

mojoをたたくと、Welocom to Mojoがでてきました。

006.png

Hello World

printとそのまま書くのではなく、fn main(): を記載するのが特徴

hello wrold.mojo
fn main():
    print("Hello mojo World!")

比較プログラム

PythonとMojoで素数を求めるプログラムで比較してみたいと思います。

  • python 3.10.12
  • mojo 0.7.0

速度の比較というと「素数」を求める、みたいな感じに数学素人はなってしまいます。ということで、1~3,000,000の間の数字で素数を求め、それにかかった時間を見てみたいと思います。

こういうケースに、ChatGPTやCopilotはめちゃくちゃ便利です。一瞬でサンプルプログラムを作成くれ、ちょっとだけ修正。素数の数もカウントします。

primes.py
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という言語で~"、という感じで指示とすると、まぁまぁのものが返ってきました)

primes.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

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?