世界を動かす技術を、日本語で。

Mojo 1.0 ベータ版

概要

  • Mojo は現代的なプログラミング言語の特長を融合した新言語
  • AIネイティブ設計 で多様なハードウェアに高性能対応
  • Pythonとの相互運用性 を持ち、既存コードの高速化が容易
  • GPUプログラミングやメタプログラミング が直感的に可能
  • オープンソース化のロードマップ と開発コミュニティの紹介

Mojoの特徴

  • 現代的な設計思想

    • Pythonの直感的な構文、Rustのメモリ安全性、Zigの強力なコンパイル時メタプログラミングから着想
    • シンプルで分かりやすい言語仕様
  • AIネイティブ

    • 多様なAIハードウェア上で最高のパフォーマンスを発揮
    • 静的型付け・コンパイル型設計によるエージェント型プログラミング適正
  • 生産性と性能の両立

    • シンプルなパターンから始め、必要に応じて複雑さを追加可能
    • パフォーマンスと開発効率の両立を実現
  • GPUプログラミングの簡易化

    • ベンダー依存や別コンパイル不要で、CPUと同じ言語で高性能GPUカーネルを記述
    • 例: TileTensorを用いたベクトル加算の定義
  • Pythonとの相互運用性

    • 既存のPythonコードのボトルネック部分のみMojoで高速化
    • MojoコードをPythonから自然にインポート・パッケージ化
    • PythonエコシステムのライブラリもMojo側で利用可能
    • 例: SIMDベクトル化カーネルによる配列要素のインプレース二乗処理
  • コンパイル時メタプログラミング

    • 実行時と同じ構文でメタプログラミングが可能
    • 条件付きコンパイルやメモリ安全性の保証、ランタイム分岐の排除など
    • 例: コンパイル時リフレクションによる汎用構造体の等価比較

開発ロードマップ

  • Phase 0: 初期立ち上げ

    • コアパーサー、メモリ型、関数、構造体、イニシャライザ、引数規約など言語基盤の実装
  • Phase 1: 高性能CPU+GPU対応(進行中)

    • CPU、GPU、ASIC向け高性能カーネル記述とPython拡張性の強化
  • Phase 2: システムアプリケーションプログラミング

    • メモリ安全性保証モデルや抽象化機能の拡充
  • Phase 3: 動的オブジェクト指向プログラミング

    • Python互換性最大化のため、クラス・継承・非型付き変数など動的機能をサポート

オープンソースとコミュニティ

  • Mojo標準ライブラリ はGitHubで完全オープンソース
  • Mojoコンパイラー は2026年にオープンソース化予定
  • 言語の若さゆえ、当面は少数精鋭による開発体制を維持
  • 開発コミュニティ への参加を歓迎
    • 興味があれば公式コミュニティに参加可能

学習・参加方法

  • Mojoの学習 リソース提供
  • 開発コミュニティ への参加案内

Hackerたちの意見

最初にMojoのことを聞いたとき、既存のPythonコードと互換性を持たせるつもりだと思ってたんだけど、どうやら今のところはかなり遠いみたい。PythonとMojoの間で行き来はできるみたいだけど、Mojo自体は既存のPythonコードを実行できないみたいだね。

Pythonの良いところって、結局エコシステムだけだよね。

彼らの最初の提案では、Pythonコードを取り込んで型ヒントを追加して、大幅に速度アップするっていうのが確かにあった。でも、実際に開発が進むにつれて、方向性がずれていったみたいだね。

コミュニケーションの中で、当然動くと思ってすごくシンプルなPythonコードを実行しようとしたんだけど、全然動かなかった。これにはかなりがっかりしたし、他の開発者たちにもどれだけ逆効果になってるのか気になるな。

それが元々宣伝されてたことだったんだ。KotlinがJavaに対してそうだったように、Pythonに対してもそうなりたかったんだよね。でも、すぐに手のひらを返した感じ。完全にオープンソースじゃない開発モデルも、ずっと怪しい感じがしてる。

サイトから: Pythonとの相互運用性 > MojoはPythonとネイティブに相互運用できるから、既存のコードを全部書き直さなくてもパフォーマンスのボトルネックを解消できるよ。最初は1つの関数から始めて、必要に応じてパフォーマンスが重要なコードをMojoに移行していけばいい。Mojoのコードは自然にPythonにインポートできて、配布用にパッケージ化もできるし、PythonエコシステムのライブラリをMojoコードにインポートすることもできるよ。

それってCodonで実現されてるんじゃないの?

確か、同等のPythonに対して36,000倍のスピードアップを宣伝してたけど、これは極端なケースでしか成り立たないってことを一切明言してなかった気がする。Pythonエコシステムを改善しようとする誠実な試みというより、むしろポンプ・ダンプの暗号通貨スキームみたいに感じる。

彼らは既存のPythonコードと互換性を持たせるつもりだった それが最初の主張だったけど、静かにウェブサイトから削除されたよね。(「Pythonはシンプルな言語」という一般的な誤解に引っかかったのかな?)今は「Pythonのように書ける」って約束してるけど、クラスのような基本的なものすらサポートしてない(それはロードマップのステージ3の一部だけど、まだステージ1に取り組んでる)。Mojoがすべての目標を達成するかもしれないけど、今のところは約束が大きくて実際はそれに届いてない感じで、V言語を思い出させるな。

よく見てたら、最初から次世代のシステム言語を作るつもりだったのは明らかだったよ。SwiftやRustからの教訓を活かして、CPU/GPU/異種ターゲットを狙って、MLIRを中心に構築していくって感じで。でも、最終的にはPythonを比較的簡単に埋め込んだり拡張したりすることも考えて作ってるみたい。Pythonの枠組みはお金を集めるのにほぼ確実に役立っただろうね。Chris LattnerはMLIRとMojoの関係について、PythonとMojoの関係よりも多く語ってたよ。

それはMojoがそう言ったからだよ。https://web.archive.org/web/20231221132631/https://docs.modu... > 私たちの長期的な目標は、MojoをPythonのスーパーセットにすること(つまり、既存のPythonプログラムと互換性を持たせること)です。Pythonプログラマーは、すぐにMojoを使えるようになり、今日利用可能な膨大なPythonパッケージのエコシステムにアクセスできるはずです。

MLに関わってる者として、パフォーマンスに興味があるから、Mojoが成功してほしいと思ってる。特にGPUとCPUのコードを同じ言語で混ぜられる可能性があるのは魅力的だよね。でも、彼らのやってる変更がPythonの開発者を遠ざけるんじゃないかと心配してる。前に起動したとき、基本的な文字列操作を試してみたんだけど、var x = 'hello'; print(x[3])が動かなくて、len(x)もダメだった。どうやら、バイトとコードポイントの表現をより具体的に選んだみたいだけど、ドキュメントと実際の実装が矛盾してたんだよね。もっと一般的なMLに向けてMojoが良い方向に進むことを願ってるけど、今のところはかなり制限がある感じ。実際、Tensors用の便利なビルトインがいくつか非推奨になってるし… しばらくはJAXを使い続けて、定期的に様子を見るつもり。うまくいくといいな。

MLに関心がある者として、Mojoの成功を願ってるよ。特に、GPUとCPUのコードを同じ言語で混ぜられる可能性が楽しみ。でも、彼らがやってる変更がPython開発者を遠ざけるんじゃないかと心配してる。オープンソースじゃない限り、ほとんどのPython開発者は来ないだろうし、意味がないよね。

Mojoはかっこいいけど、Pythonの後方互換性のことがよくわからない。これが足かせになってる気がする。Kotlinの欠点はJavaとの互換性に起因してると思う。もっと明確にすればうまくいったかもしれないけど、今のやり方じゃうまくいかない気がする。

その点に関しては、Nimプログラミング言語を再現しようとしているように見えるね。

残念なことに、Nvidiaはその間にじっとしてなかったし、次世代のCUDA、CuTileをPython用に、そしてすぐにC++用にも作ったんだ。これはCUDA Tile IRを使ったもので、MLIRに基づく似たようなコンパイラスタックを使ってる。ポータブルではないけど、Nvidiaにしっかりプロモーションされて、開発ツールに統合されて、既存のCUDAコードと一緒に動くことで、Mojoよりも遥かに多く使われると思う。Tile IRは、少なくとも性能の良いLLMカーネルを書くのがどれだけ簡単かっていう観点から見ると、MojoよりもTritonの脅威に対する反応だったんじゃないかな。

面白いね、CuTileの影響ってどれくらい大きいの?

みんなMojoをGPUコードを書くための良い構文だと勘違いしてるけど、NvidiaのPythonフレームワークがすでにそれをやってると思ってるみたい。でも…CuTileはAMDのGPUやApple Siliconで動くのかな?Nvidiaがやることにはベンダーロックインがあるからね。

それに遅れを取らないために、IntelとAMDも似たような努力をしてるし、CPythonのJITがようやく実現しそうだね。GraalPyやPyPyのような取り組みもあるし。これらの努力は、Windowsでも動作するから、サーバーがLinuxディストリビューションでも、ほとんどの社員がWindowsを使ってる企業には関係あるよね。これがまたSwift for TensorFlowみたいな結果にならないか心配してる。

今日では「AIネイティブ」と大々的に宣伝するのが必要な時代になってる気がする、少なくとも一部の人にはね。私にとっては、あんまり意味がないように思えてちょっと引いちゃう。ここにいるAI好きの人、これについて説明してくれない?「コンパイルされた静的型付け言語として、エージェントプログラミングに最適」ってどういう意味?

コーディングエージェント(ちゃんと指示すれば)は、コードをループで動かそうとするからね。静的型付けとコンパイルはそのプロセスに役立つ(例えば、実行時に未定義の変数が見つかることがなくなる)。でも、これが完全に安全ってわけじゃないってのはみんな知ってるよね。

AIが注目されるようになってから、これらの製品やサービスのヒーローページでの必死さを見るのが本当に興味深い。私にとって一番面白かったのは、IBM DB2の製品ページを開いたら「AIデータベース」ってラベルが付いてたこと。爆笑だよ。 > どうして、または、コンパイル時により多くのエラーが捕まるっていうのは、エージェントがユニットテストや他のテストなしで静的に自分の作業をすぐにチェックできることを意味する。

それが何を意味してるのかは分からないけど、「AIネイティブ」ってこのプログラミング言語にとってはちょっと意味がないと思う。コンパイルと静的型付けについては、エージェントプログラミングをする際にコンパイル時に問題を検出できるのは非常に助かるよね。そうすれば、実行時に問題が少なくなるし、もちろんエージェントはそれに対処するのが難しくなる。ユニットテストはそのギャップを少し埋めるのに役立つけど、完全には埋められない。彼らのウェブサイトには書かれてないけど、Mojoはエージェントプログラミングにはあまり向いてないかもしれない。なぜなら、Mojoのトレーニングデータがまだあまりないから。

自分を「AI好き」って思ってるわけじゃないけど、使ってるよ。エージェントはフィードバックが多いほどうまくいく傾向があるし、型チェックはバカなミスを自動でキャッチするのに結構役立つ。要するに、エージェントにヒントをたくさん与えるのが大体の場合は良いってことだね。

https://mojolang.org/docs/tools/skills/

それは新しい「…ブロックチェーン上で」みたいなものだね。Python+ruff+pycheckとTypeScriptは、機械コードではなくバイトコードにコンパイルされる。Rustの意味で静的型付けされてるわけじゃない。それでも、モデルがそれらのどちらでも良い、有効なものを生み出すのを見てきた。厳密に「コンパイルされた」り「静的型付けされた」りする必要はないみたい。結局、AIは良いツールがあればコードをすぐにチェックして反復することに関しては、そんな特性を気にしないみたいだね。

現在のLLMは過去のコードの膨大なライブラリでトレーニングされているから、今後しばらくは確立された言語の方が新しい言語よりも良く機能するだろうね。特に、Pythonのようにオープンソースコードがたくさんある言語はね。既存のコードがない企業にとっては大きな問題だよ。だから、この必死な「AIネイティブ」マーケティングは、エージェント的な世界で relevance を持つためには必要なんだろうね。それが十分かどうかは、時間が教えてくれるよ。

プログラミングはまだ始めたばかりだけど、Mojoのベースにオブジェクト指向ではなく関数型言語の構文を使ってほしかったな。私の経験では、AIは関数パイプラインを構築して、その導関数を計算し、たくさんのデータを通すことにかなり依存してるから、関数型プログラミングの合成性や高階関数を使うと説明が楽なんだよね。他の分野でも、大きな関数パイプラインを構築して出力を生成する方向に進んでる気がするから、Mojoもそういう分野に適してると思う。例えば、私はCADの分野で開発してるから、「関数型Mojo」言語を使いたいな。

同じような感じだな。これって、数十年前にニューラルネットやAIが作られた時の最初の言語、Lispの仲間だったはず。Swiftの素晴らしいプロジェクトから来てるけど、Appleの幹部を納得させるのは大変だったよね。それでも、Haskellのような関数型言語のアプローチとClojureの実用性を期待してたんだ。

現実世界のMLコードの大半は今、PythonやC++のような言語で書かれてる。学術界やオンラインフォーラムの外では、関数型言語の愛好者はあまりいないしね。業界的にも、実際のコーディングは今後LLMがやることになりそうだから、新しい言語をニッチな潜在ユーザーベース向けに設計するのはあまり意味がないと思う。LLMは大量のトレーニングデータが必要だからね。だから、MojoをPythonベースにすることにしたのも、彼らが言ってる他の理由と合わせて、そういう要素があったんじゃないかな。

2026年の秋にMojoをオープンソース化することを約束しました。 https://docs.modular.com/mojo/faq/#will-mojo-be-open-sourced

ノイズの中からいい発見だね。ありがとう!

Juliaの方が同じ目的には成熟してるし、昨年からNVIDIAはPythonとC++のツールがCUDAで機能的に同等になってる。PythonのcuTile JITコンパイラは、純粋なPythonでCUDAカーネルを書くことを可能にしてる。AMDとIntelも似たようなアプローチを追随してる。Mojoが広く採用されるために、予定通りに登場するかどうかはまだわからないね。

PythonのcuTile JITコンパイラは、純粋なPythonでCUDAカーネルを書くことを可能にしてる。今は純粋なPythonじゃないし、これからもそうならないよ。これらの「パフォーマンスに優しい」Python方言(Tryton、Pythran、CuTile、Numba、Pycell、cuPyなど)は、一見Pythonっぽいけど、表面をちょっとこすっただけで全然違うってわかる。彼らはPython風の構文を持つDSLだけど、最適化されて、型付けされて、正しく推論されるように作られてる。使ってみるとそれを感じるよ。どれもPythonの機能の多く(ほとんど?)が使えないし、Pythonの本質的な問題に苦しむことになる。自分たちに嘘をつくのはやめよう。Pythonは効率とパフォーマンスにおいて本質的に悪い。GILを超えて、動的型付け、参照セマンティクス、モンキーパッチ、超動的オブジェクトモデル、CPython ABI、デフォルトのBigInt、ランタイムモジュールシステムなど、全てが小さなスクリプト言語には意味がある技術的選択だけど、HPCや効率にはひどく合わない。Numpyやscipyのエコシステム自体も、単純なCPUバウンドのテンソル演算のためにPythonの制限を回避するためのハックに過ぎない。主に、組み込みのPythonのパフォーマンスがひどすぎて、単純なforループがExcelを競走馬のように見せるから。Mojoは違う。Mojoは既存のクソをハックするんじゃなくて、クリーンな状態から始めようとしてる。そして、「Pythonのような体験」を提供しようとしてるけど、過去の言語設計の経験をもとにしたしっかりしたデザインの上に成り立ってる(Pythonは30年以上前のものだし)。そのためだけでも、成功を願ってるよ。

MojoはML向けだって知ってるけど、実はゲーム開発に使ってみたいな :)

私も!バイオインフォマティクス関連の仕事で使ってるけど、ほんとに素晴らしいよ。完全にオープンソースになったら、もっと簡単におすすめできるのが待ちきれない!

Pythonは今や基本的にマスターグルー言語だね。実行時間の数パーセント以上をPythonで使っているなら、たぶんやり方が間違ってるよ。個人的にはCythonが何で必要なのかも理解できないし、パフォーマンスが重要な関数は他の言語で書けばいいのに。https://pypi.org/project/rustimport/ > https://pypi.org/project/import-zig/ それに、これらの言語でスレッドを立てたり、関数呼び出しを擬似RPCとして使ったりもできるよ。複雑なビルドシステムなしでね。

CythonやPyBind、Nanobindは、C++で書かれた既存のライブラリをラップして、C++っぽくないインターフェースを作るのに良いよね。ctypesやSWIGからの大きなステップだった。

Mojoは、Rustよりもプログラミングモデルが簡単で、Python開発者には馴染みやすい構文を持ち、全体的にモダンなデザインを目指している言語だよ。今の目標は、Pythonを拡張する最も簡単な方法を提供すること。 .mojoファイルを手間なくインポートできる同じインターフェースを提供しているんだ。

過去2年間、楽しみでMojoをたくさん書いてきたけど、ほんとにクールな言語だよ。Rustに近いオーナーシップモデル、Zigよりも強力なコンパイル時機能、リッチな型システム、ファーストクラスのSIMDサポートなどがある。パフォーマンス的には、LLVMのラッパーじゃない言語としては久しぶりのものだね。LLVMはまだ関わってるけど、RustやZigとは違う使い方をしてるみたい。Mojoが今年の後半にオープンソースになったらすごく楽しみだよ。