| パラダイム | |
|---|---|
| 登場時期 | 2023年 |
| 設計者 | Chris Lattner |
| 開発者 | Modular |
| 最新リリース | 1.0/ 2026年8月11日 |
| 型付け | |
| 影響を受けた言語 | Python, Cython[要出典], C, C++, Rust, Swift, Zig |
| プラットフォーム | Linux、macOS |
| ライセンス | コンポーネントにより異なる |
| ウェブサイト | https://www.modular.com/mojo |
| 拡張子 | .mojo, .🔥 |
| 関連言語 | Python |
MojoはModularが開発するプログラミング言語である。2023年に発表され、Pythonとの高い相互運用性を持ちながら、システムプログラミングやAI向けの高性能なコードを記述できることを特徴とする。
MojoはPythonの構文やエコシステムとの親和性を重視している一方、静的型付け、ジェネリックプログラミング、所有権や値の移動・コピーなど、低レベルのプログラミングに必要な機能を備えている。
また、MLIRを基盤とするコンパイラ技術との統合を特徴としており、CPU、GPUなどを対象とするコードの最適化に利用される。
Mojoは、Pythonの記述性とエコシステムを維持しながら、C++やRustなどのシステムプログラミング言語に近い性能と低レベル制御を実現することを目的として開発された。
特にAIおよび機械学習分野を主要な用途としており、Pythonで構築された既存のAIソフトウェアと、Mojoで記述された高性能なカーネルやシステムコードを組み合わせることができる。
MojoはJupyterを利用した環境でも利用されているほか、Mojo SDKによってローカル環境でプログラムをコンパイルして実行できる。
MojoはPythonに近い構文を持ちながら、システムプログラミング向けの機能を追加している。
主な特徴として以下が挙げられる。
Mojoの構文はPythonに強く影響を受けており、インデントによってブロックを表現する。
fn main():
print("Hello, World!")
Pythonと同様に、波括弧などを使用せず簡潔にコードを記述できる。
一方で、Mojoではシステムプログラミングを目的として、Pythonにはない型システムやメモリ管理機構が追加されている。
Mojoではfnやdefを使用して関数を定義できる。
fn add(a: Int, b: Int) -> Int:
return a + b
戻り値や引数の型を明示することで、コンパイラによる型検査や最適化を利用できる。
Mojoではstructを使用して構造体を定義できる。
struct Point:
var x: Int
var y: Int
```
fn length(self) -> Int:
return self.x * self.x + self.y * self.y
```
構造体にはフィールドだけでなく、メソッドや初期化処理などを定義できる。
Mojoはtraitによる抽象化機構を備えている。
Traitは、型が提供する操作や性質を定義するために利用され、ジェネリックプログラミングと組み合わせて使用できる。
標準ライブラリでも複数のtraitが利用されている。
Mojoは型パラメータを利用したジェネリックプログラミングをサポートしている。
fn identity[T: AnyType](value: T) -> T:
return value
これにより、特定の具体的な型に依存しない関数やデータ構造を記述できる。
Mojoでは型を明示的に指定できるほか、コンパイラによる型推論を利用できる。
そのため、静的型付けによる型検査を利用しながら、型が明らかな場合には型注釈を省略できる。
Mojoはシステムプログラミングを想定して設計されており、値の所有権、移動、コピーおよびライフタイムを扱う機構を備えている。
これにより、ガベージコレクションを前提とせずにリソースを管理するコードを記述できる。
また、構造体のライフサイクルに関連する処理を定義することができ、メモリやファイルなどのリソース管理に利用できる。
Mojoの主要な特徴の一つがPythonとの相互運用性である。
MojoからPythonのモジュールやライブラリを利用できるため、既存のPythonエコシステムを活用できる。
また、Mojoで実装した関数をPythonから呼び出すこともできる。
この機能によって、既存のPythonプログラム全体を書き換えることなく、処理負荷の高い部分をMojoへ移行することができる。
公式リポジトリにはPythonコードからMojoの関数を呼び出す例を含むpython-interopサンプルが用意されている。
MojoはFFIを利用してCなどの外部コードと連携できる。
標準ライブラリにはstd.ffiが存在し、C互換の型や外部関数呼び出しなどの機能が提供されている。
これにより、既存のCライブラリなどをMojoから利用することが可能となっている。
Mojoのコンパイラは、MLIRを中心としたコンパイラ技術を利用している。
MLIRは複数の抽象レベルの中間表現を扱えるコンパイラ基盤であり、異なるハードウェア向けのコード生成や最適化に利用される。
MojoはMLIRを利用することで、通常のアプリケーションコードだけでなく、AI処理やGPUカーネルなどの低レベルなコードも同一の言語環境から扱えるよう設計されている。
MojoはSIMDを利用したベクトル化処理を記述できる。
SIMDでは、一つの命令で複数のデータを同時に処理することで、数値計算や画像処理などの処理を高速化できる。
MojoではSIMDを利用した低レベルな最適化を言語機能や標準ライブラリから利用できる。
Mojoはコンパイル時に型や値などの情報を利用するメタプログラミング機能を備える。
コンパイル時に決定可能な情報を利用してコードを特殊化することで、汎用的なコードを保ちながら実行時のオーバーヘッドを削減できる。
この機能はジェネリックプログラミングやハードウェア最適化と組み合わせて利用される。
MojoはAIおよび機械学習を主要な用途の一つとしている。
AI分野ではPythonが広く利用されている一方、ニューラルネットワークのカーネルやテンソル演算などの低レベル処理では、高い性能とハードウェアへのアクセスが必要になる。
MojoはPythonとの相互運用性とシステムプログラミング機能を組み合わせることで、これらの処理を同じ言語環境から実装できるようにしている。
ModularのAI向けプラットフォームであるMAXとも関連しており、Mojoを使用してCPUやGPUなどを対象としたカーネルを記述できる。
現在の公式ドキュメントでは、Mojoを使用してNVIDIA、AMD、AppleのGPU向けのカスタムカーネルを記述できるとされている。
Mojoには標準ライブラリが用意されている。
標準ライブラリには、基本型、コレクション、文字列、入出力、ファイル、メモリ、FFIなどの機能が含まれている。
標準ライブラリのソースコードはModularのGitHubリポジトリで公開されている。
std.ioでは入出力関連の機能が提供される。
標準入力、標準出力、標準エラー出力などを扱う機能が存在する。
標準ライブラリにはファイルを読み書きするためのAPIが存在する。
例えば、openを使用してファイルを開き、読み書きを行うことができる。また、with文を使用してファイルを自動的に閉じることもできる。
Mojo SDKを利用することで、Mojoソースファイルをコマンドラインからコンパイルして実行できる。
また、Visual Studio Code向けのMojo拡張機能が提供されており、Mojoによる開発を支援する。
公式リポジトリには多数のサンプルプログラムが用意されている。サンプルには、ライフゲーム、Python相互運用、演算子、単体テストなどが含まれている。
公式のMojoサンプルではPixiを利用した開発環境の構築が推奨されている。
Pixiはパッケージ管理と仮想環境管理を行うツールで、Mojoのサンプルプロジェクトにおける依存関係の管理などに利用されている。
Mojoには単体テストを記述・実行するためのテスト機構が存在する。
公式のサンプルにはtestingプロジェクトが用意されており、Mojoのテスト機能を確認できる。
Mojoにはソースコードを自動整形するためのフォーマット機能が用意されている。
標準ライブラリの開発でもMojoのフォーマッタが利用されている。
2026年現在、公式リポジトリでは以下のプラットフォームがサポート対象として記載されている。
Windowsは現在公式サポート対象外である。
Mojo関連の公式リポジトリでは、標準ライブラリ、サンプル、テスト、ベンチマーク、ドキュメントなどが管理されている。
標準ライブラリには、概ね以下のようなディレクトリが存在する。
stdlib/ - 標準ライブラリstdlib/std/ - 標準ライブラリ本体stdlib/test/ - テストstdlib/benchmarks/ - ベンチマークstdlib/docs/ - ドキュメントexamples/ - サンプルプログラムMojo関連ソフトウェアでは、コンポーネントによってライセンスが異なる。
公開されているMojo標準ライブラリおよび公式サンプルの一部は、Apache License 2.0 with LLVM Exceptionsで公開されている。
一方、標準ライブラリには現時点でオープンソースとして公開されていないモジュールも存在する。公式FAQでは、一部のモジュールについて、変更が活発であること、MAXとの統合が強いこと、プロプライエタリな要素を含むことなどが理由として挙げられている。
MAXはModularが開発するAI向けの実行・最適化プラットフォームである。
MojoはMAXと組み合わせて使用でき、CPU、GPU、AIアクセラレータなどを対象とした低レベルの処理を実装するために利用される。
MLIRはMojoのコンパイラ技術において重要な役割を持つ。
MLIRは複数の抽象レベルの中間表現を扱うことができ、異なるハードウェア向けのコード生成や最適化に利用される。
fn main():
print("Hello, World!")
fn add(a: Int, b: Int) -> Int:
return a + b
fn main():
print(add(10, 20))
struct Point:
var x: Int
var y: Int
fn init(inout self, x: Int, y: Int):
self.x = x
self.y = y
fn main():
var p = Point(10, 20)
print(p.x)
print(p.y)
fn identity[T: AnyType](value: T) -> T:
return value
fn main():
print(identity(42))
MojoではPythonのコードやライブラリとの相互運用が可能である。
公式リポジトリには、MojoからPythonを利用する例やPythonからMojoの関数を呼び出す例が収録されている。
Mojoは2023年にModularによって発表された。
発表当初から、Pythonの使いやすさと既存エコシステムを維持しながら、C++やRustなどに近い性能を実現することが主要な目標として掲げられていた。
その後、Mojo SDK、Python相互運用機能、システムプログラミング機能、GPUおよびAI向けの機能などが継続的に開発された。
2026年にはMojo 1.0が公開され、Modularの公式ドキュメントでもMojo 1.0が案内されている。
Mojoは、Pythonの高い記述性とエコシステムを維持しながら、システムプログラミングやハードウェア最適化まで扱える言語を目指している。
特にAI・機械学習分野では、Pythonによる高レベルな処理と、Mojoによる低レベルなカーネル実装を組み合わせられることが特徴である。
一方で、Mojoは比較的新しい言語であり、仕様や標準ライブラリ、関連ツールは継続的に発展している。また、2026年現在はWindowsが公式サポート対象外である。