Mojo🔥：PythonとC言語のパフォーマンスを併せ持つ新しいAIプログラミング言語



# はじめに
今話題のMojo🔥（PythonとC言語のパフォーマンスを併せ持つ新しいAIプログラミング言語）について紹介します。
本記事の前半パートではMojo🔥について解説し、後半パートではMojo Playgroundで遊んでみます。

https://www.modular.com/


【前半パート】Mojo🔥について
========

Mojo🔥とは
------

Mojo🔥は、Pythonの使いやすさとC言語のパフォーマンスを併せ持つ新しいプログラミング言語です。Modularというソフトウェア開発スタートアップが開発しています。CEOのChris Lattner氏は、Apple時代にプログラミング言語「Swift」の開発にも携わってきた方です。

Mojo🔥の特徴
-------

*   Pythonとの互換性：既存のPythonコードやライブラリをMojo🔥で直接使用できる
*   システムプログラミングのサポート：Mojo🔥はシステムプログラミングに対応しており、メモリ管理や並行処理などが可能　
※システムプログラミング：コンピュータシステムの基本的な機能やリソースを直接操作・管理するソフトウェア開発のこと
*   高速化：Mojo🔥は、C言語のような低水準なコードに変換されるため、実行速度が速い


Keynoteでは「Pythonよりも35000倍速い言語」として紹介されていたので、そのイメージが強い方も多いかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/66ad2827-6b01-bdc2-7460-ab9f86b5309e.png)

https://www.youtube.com/watch?v=-3Kf2ZZU-dg

Mojo🔥の使用方法
---------

2023年5月14日現在、[MojoのGitHub](https://github.com/mojolicious/mojo/tree/main/examples)はディスカッションのみの用途となっており、ソースコードはまだ一般には公開されていません。アーリーアクセスを利用するには、Mojo Playgroundへの登録が必要です。Mojo🔥で遊んでみたい方は、下記のサイトよりウェイトリストに登録し案内のメールを待って下さい。

https://www.modular.com/get-started


Mojo🔥の今後
---------

現在、Mojo🔥は開発段階ですが、Modular社は「時間の経過とともにPythonに対するスーパーセットとなるように設計されている」と述べており、将来的にMojo🔥はAI 開発者にとって素晴らしいプログラミング言語になると考えられます。

【後半パート】Mojo Playgroundで遊んでみる
========

Mojo Playgroundとは
------
Mojo Playgroundは、Mojo🔥を試すことができるJupyterHubベースのオンライン環境です。ユーザーは、チュートリアルを実行したり、独自のMojo🔥コードを記述して試したりすることができます。

Mojo Playgroundは、Mojo🔥の機能や性能を試すだけでなく、Mojo🔥コミュニティに参加し、言語の開発に関するフィードバックや提案を共有する場となります。

Mojo Playgroundへのアクセスは、先述の通り現在制限されており、リクエストによってのみ利用可能です。アクセスが承認されると、独自のプロジェクトやチュートリアルを試すことができるようになります。

Mojo🔥のチュートリアル
------
私の場合は5時間ほどでアクセスが承認されました。Modularから届いたメールに記載されていたリンクからJupyterHubベースのPlaygroundにアクセスできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/6d141577-8b46-d1fc-3b70-c587759276f9.png)

チュートリアルとして下記の5つのipynbが用意されていました。

* HelloMojo.ipynb：Mojo🔥 の基本を学ぶためのチュートリアルです。Mojo🔥 の基本的な構文、変数、関数について説明。
* BoolMLIR.ipynb：MLIR（Multi-Level Intermediate Representation） を使用した論理演算のチュートリアルです。MLIR を使用して論理演算を実行する方法について説明。
※MLIR：コンパイラのどの段階でも使える中間表現フレームワークのこと[（参考サイト）](https://zenn.dev/acd1034/articles/230423-mlir3vdt)
* Mandelbrot.ipynb：マンデルブロー集合のチュートリアルです。Mojo🔥 を使用してマンデルブロー集合を計算する方法について説明。
※マンデルブロー集合：ZおよびCを複素数とし、Zの初期値を実数部0、虚数部0として、Z=Z^2+Cの演算を多数回繰り返しても、Zの絶対値が一定の値（例えば2.0）を超えず、発散しないCの値の集まり[（参考サイト）](https://codezine.jp/article/detail/256)
* Memset.ipynb：メモリ割り当てと初期化のチュートリアルです。Mojo🔥 を使用してメモリを割り当て、初期化する方法について説明。
* Matmul.ipynb：行列積のチュートリアルです。Mojo🔥 を使用して行列積を実行する方法について説明。

Mojo🔥の文法
------

Mojo🔥の文法は下記のようにPythonに非常に似通っていますが型定義や構造体などの点が異なります。

```python:mojo_1.🔥
print("Hello Mojo!")
```

```python:mojo_2.🔥
def your_function():
    let x: Int = 42
    let y: F64 = 17.0

    let z: F32
    if x != 0:
        z = 1.0
    else:
        z = foo()
    print(z)

def foo() -> F32:
    return 3.14

your_function()
```

```python:mojo_3.🔥
struct Complex:
    var re: F32
    var im: F32

    fn __init__(inout self, x: F32):
        """Construct a complex number given a real number."""
        self.re = x
        self.im = 0.0

    fn __init__(inout self, r: F32, i: F32):
        """Construct a complex number given its real and imaginary components."""
        self.re = r
        self.im = i
```


また、Mojo🔥とPythonのライブラリ（Numpy, Pandasなど）とのインターフェースが用意されており、場合よってはMojo🔥コードの中にPythonを記述することもできます。そのため、すでにPythonに習熟している方であれば、学習コストは小さいと感じました。



**おまけ：Mojo🔥のコードを初めて見たChatGPT（GPT4）の反応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/f88f8227-a6fd-113e-8cc4-f9152b31b8c0.png)



# まとめ

Mojo🔥は、Pythonの使いやすさとC言語のパフォーマンスを併せ持つ新しいAIプログラミング言語です。現在、Mojo🔥はまだ開発段階にありますが、時間の経過とともにPythonに対するスーパーセットとなるように設計されており、今後の発展が大いに期待されます。Mojo Playgroundで遊んでみることで、Mojo🔥の機能や性能を一部ではありますが、試すことができました。今後も、Mojo🔥の開発に注目していきたいと思います。

少し本題からそれますが、競技プログラミングでもMojo🔥が使えるようになるのが楽しみです。Pythonライクに書けてC言語のパフォーマンスを持つMojo🔥は、競技プログラミングでも人気の言語になる可能性があると感じました。