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

MLには新しいプログラミング言語が必要 – クリス・ラトナーとのインタビュー

概要

  • Chris Lattnerが LLVMやSwiftの開発者 としての経歴を語るエピソード
  • Mojo言語 開発の背景と、GPU活用の生産性向上に挑む意図
  • ハードウェアの詳細 を理解しやすく・共有しやすくする型安全なメタプログラミングの重要性
  • 計算内容と ハードウェアプラットフォーム 特化の両立を目指す設計思想
  • エコシステムの自由化と 一社独占の回避 に向けた課題意識

機械学習に新しいプログラミング言語が必要な理由

  • Chris Lattnerは LLVMやSwift など、基幹技術の開発者
  • 新たに Mojo の開発に取り組み、現代GPUの性能を 最大限引き出す 生産的な方法を模索
  • 従来の言語では、 高性能カーネル の記述と使いやすさの両立が困難
  • ハードウェアの詳細を 意識的に扱わせつつ、作業量を抑え、共有もしやすくする 型安全なメタプログラミング を導入
  • 計算内容やハードウェアごとの 最適化・特化 を柔軟に実現する設計
  • AI計算資源の民主化、一社独占の回避を目指す
  • MojoやMLIR、Modular AIなど 関連プロジェクト の紹介

Chris Lattnerのキャリアと思想

  • 幼少期から コンピュータの仕組みに興味 を持ち、BASICやPC雑誌でプログラミングを学習
  • ゲーム開発や ハードウェア性能の追求 がきっかけで、システムとパフォーマンスに関心
  • 大学で コンパイラ分野 に出会い、LLVMを開発
  • 大規模システム としてのコンパイラの面白さ、ソフトウェア工学的な積み上げ体験
  • LLVM以降、C++やSwiftなど低レイヤから高レイヤまで幅広く設計・実装
  • ハードウェアとソフトウェアの 境界領域 での経験と知見が強み

Swift誕生の背景と設計思想

  • LLVMの成熟後、C++サポートを Clang で実現し、自己コンパイルも可能に
  • C++の設計に限界を感じ、「より良い言語を作りたい」と Swift を開発
  • Swiftは 夜間・週末の個人プロジェクト として開始、既存言語の欠点を補う狙い
  • パターンマッチング や代数的データ型など、実用的な機能を重視
  • 学術的な型理論よりも、 現場での使いやすさ・実用性 を優先した設計

パターンマッチングの重要性

  • MLやOCaml、Haskell など、関数型言語で普及していたパターンマッチング
  • 2010年前後の主流言語( C++、C#、Java、JavaScript)では未対応
  • 実用性・表現力 の高さから、Swiftでも積極的に採用
  • 学術的な理論よりも、 開発者目線での便利さ を重視する姿勢

新しい言語設計と今後の展望

  • ハードウェアの進化に伴い、 従来の抽象化 では性能を引き出しきれない課題
  • 型安全なメタプログラミング で、詳細制御と生産性の両立を図る
  • Mojo をはじめ、AI・機械学習向けの 新しいエコシステム 構築への挑戦
  • 開発者が ハードウェアの違いを意識しつつ も、再利用性・共有性を損なわない設計
  • 一社独占 を防ぎ、誰もがAI計算資源にアクセスできる未来を目指す

Hackerたちの意見

そうだね、でもMojoのライセンスは全然ダメだね。

わぁ、ちょっと見てみたけど、商業目的でCPUとNvidiaを分けて、他の「アクセラレーター」(TPUやAMDみたいな)とは別にしてるみたい。 他のアクセラレーターにはライセンスのために連絡しないといけないんだって。 https://www.modular.com/blog/a-new-simpler-license-for-max-a...

私の素朴な考えでは、非営利団体ではなく単一の企業によって管理されている言語は、スタート地点にも立てないと思う。Javaのライセンス変更の時に、どれだけの企業が反応したか見てみて。Pythonの代わりにMojoのような言語にビジネスを基づけるのは、バカか、私には理解できないほど賢い人だけだと思う。

Mojoがやってることって、Juliaにはできないことなの? Juliaはエコシステムに制約があるのは分かるけど(Pythonとはうまく連携できるし)、Mojoがどこが優れてるのかはよく分からないな。

Mojoはかなり低レベルに見えるし、コントロールの度合いも高いね。それに、もっと堅牢な感じがする。Juliaはセマンティクスやパフォーマンスが不安定で、Mojoが目指すような基盤ソフトウェアには向いてないと思う。

特に、JuliaにはJuliaGPUやReactantみたいなユーザーフレンドリーで堅牢なGPU機能があるからね。他にも一般的なJuliaコードをGPUに変換するオプションがたくさんあるし。 1: https://enzymead.github.io/Reactant.jl/dev/ 2: https://enzymead.github.io/Reactant.jl/dev/

Pythonとの相互運用性はちょっと良さそうだね。でも一方で、PythonCall.jl(JuliaからPythonを呼び出せるやつ)はかなり良くて安定してる。Juliaには結構いいMLフレームワーク(Lux.jlやFlux.jl)があるし、Mojoに同じように使えるネイティブなMLフレームワークがあるかは分からないな。

Mojoってカーネルを書くために作られたんじゃないの?記事の冒頭にも書いてあるじゃん。> 最先端のカーネルを書くために。JuliaとPythonは、高水準言語で、カーネルが存在する他の言語を呼び出すんだよね。

[0] https://danluu.com/julialang/

MojoがJuliaにはできないことって何か知ってる?AoTコンパイルのファーストクラスサポートだよ。https://docs.modular.com/mojo/cli/build そう、Juliaにも実行可能ファイルを作るオプションはいくつかあるけど、なんか後付け感があるよね。

  • 任意のJuliaコードをネイティブスタンドアロンバイナリ(rust/C++風)にコンパイルすること、そのすべての影響を伴って。

JuliaでPythonモジュールを作ろうと調べたけど、今のところあんまりサポートされてないみたい。対して、Mojoではそれがコア機能なんだよね。

Mojoがあまり普及してないのは変だね。リリースされてからかなり時間が経つのに、みんなまだPyTorchを使ってる。ライセンスの問題が思ったより大きいのかも。

上に書いてあるけど、> 最先端のカーネルを書く Mojoはカーネルを書くためにC++と競争してるみたい。PyTorchやJuliaは高レベルの言語だから、カーネルを書くことはないし。

まだベータ段階だから、ちょっと使いづらいね。Mojoは実質的にはModularが公開した内部ツールなんだ。1.0の状態になるまでは、真剣に使われることはないと思う。でも、他の人が言ってたように、PyTorchとは競争してなくて、CUDAと競ってるんだよね。

個人的には、ちょっとやりすぎた感があるかな。まず、Juliaが好きな人も結構いるし、HNでどう言われようと商業利用は着実に増えてるし、GPGPUのサポートもあるからね。一方で、PythonのJITコンパイラの状態が悪いとしても、少なくともNVIDIAとIntelはGPGPUプログラミングのためのPython DSLに真剣だから、PythonのままでC++のパフォーマンスに近づけるんだよね。だから、結局Mojoはあんまり魅力的じゃないかな。

まだまだ不完全な感じがするね。> もしかしたら1年、18ヶ月後には[...] クラスを追加するよ。

本当にリリースされたの?前にチェックしたときはオープンソースじゃなかったし、プロプライエタリなバポーウェアスタックに頼りたくないんだよね。

一般的なプログラミングにはまだ準備が整ってないよ。Modular自体はMAXエンジン用のMojo APIを提供しようとしたけど、言語が急速に進化しすぎてその投資を諦めざるを得なかった。ロードマップによると、フェーズ1が完了したらもっと採用が進むと思う。1. https://docs.modular.com/mojo/roadmap

私はシステム側にいるけど、クリスとチームがMojoでやってることは結構面白いと思うし、ポリグロットのFFIの混乱を解消するのに役立つかもしれない。ただ、実際にオープンにならない限り、投資したり使う議論を始めたりすることはできないな。

彼らはオープンソースにする前に本格的な採用は見込めないだろうね。今のプログラミング言語のルールとして、力を持って強制できないならそうなるし、Modularにはその力がない。クローズドソースの言語には、もう何度も痛い目にあった人が多すぎる。

ライセンスがこの言語の大きな障害になってると思う。新しいクローズドスタックに投資したい個人や組織はほとんどいないからね。CUDAが受け入れられてるのは、長い間存在していたからだし。GPGPUには、Linuxのような瞬間が必要だね。

市場はこういうものに対してかなり効率的だよね。過去10年でいくつかの異なるMLソリューションが急速に普及したのに、Mojoはあまり進展がない。これは、ユーザーが直面している現実の痛点を解決していない明確なサインだと思うし、どんなに実行が良くても、少数の人にしか魅力がないニッチなソリューションを作っているんじゃないかな。

このエピソードを聞いて、2025年9月でもクラスのサポートが中期的な目標とされていることに驚いたよ。1-2年前のMojoの議論では「Pythonのスーパーセット」っていう視点がよく出てたけど、この進捗ペースだとちょっと夢物語に思えるね。

Pythonの上位互換を目指してたわけじゃないよ。それはモメンタムを作るための話題だったけど、目的が達成されたら静かに放棄された。

それはずっと長期的な目標だったんだ。

Juliaは機械学習にとって素晴らしい言語になりうる。でも、もっと注目されて、開発者が関わる必要があるね。

最初のプロットまでの時間と実行可能なサイズは今どうなってるの?前回は200MBのハローワールドを表示するのに数秒かかってた。進展はしてると思うけど、もうそこに到達してるのかな?

JuliaがMLにとって「素晴らしい」とされる理由は何?

なんで誰かが動的型付け言語から別の動的型付け言語に移るのか、全然理解できない。下で引用されてるカーネルの例も「うーん、型は好きなように設定できる」って感じだし。まあ、もしかしたら動的型付け言語の実用に縛られてるのかもしれないし、「ML向け」ってのは「Jupyterノートブックでコーディングしてる」って意味かもしれないから、#2の人が何が起こってるか理解できるかどうかなんて気にしないのかもね。

もっと多くの人の関心と開発者の注目が必要だね。それが問題なんだ。JuliaはPythonの人気には勝てない。Pythonの競合は、そのエコシステムと100%互換性がないとダメだよ。

Pythonが支配的な理由は、現代のMLアプリケーションが孤立して存在していないから。昔のC/FORTRAN/MATLABのスクリプトのように、単純で均質なデータを読み込んで、数値を計算して、単一の結果を出すだけじゃないんだ。むしろ、数値計算を超えた機能を持つ複雑なアプリケーションで、しっかりしたソフトウェアエコシステムが必要なんだよ。例えば、現代のMLアプリケーションは、さまざまなソース(ローカルファイルシステム、クラウドストレージ、HTTPなど)から、異なる形式のデータ(テキスト、画像、動画など)を読み込んで調和させるETLパイプラインが必要かもしれない。実際の計算は、信号処理や画像処理、最適化、統計など、多くの高レベルな機能を活用する必要がある。これらの計算は一台のマシンでは処理しきれないことが多いから、アプリケーションは計算クラスターやクラウドにジョブを振り分ける必要がある。最後に、結果を洗練された可視化や整理が必要で、GUIやデータベースも必要になる。Python以外に、これらすべての機能を提供できるリッチなエコシステムを持つ言語はないよ。Pythonの数値計算ライブラリ(NumPy/PyTorch/JAXなど)は、内部でC/C++/FORTRANを呼び出していて、非常に高性能なんだ。実装していない機能については、PythonのC/C++ FFI(例えば、Python.h、NumPy C統合、PyTorch/Boost C++統合)は完璧ではないけど、C/C++でパフォーマンスが重要な部分を実装するのは、Juliaのような別の言語でエコシステム全体を再実装するよりずっと簡単なんだ。

この人はGPUカーネルについて心配してるけど、GPUカーネルは絶対にPythonで書かれないよ。君が指摘してるように、PythonはMLのための接着剤みたいなもんだから。> Python以外に、これらすべての機能を提供できるリッチなエコシステムを持つ言語はない。確かにそうかもしれないけど、私たちの中には、少なくとも平均的にイライラする言語の周りで成長したことにまだ恨みを持ってる人もいるよ。

Pythonのエコシステムは打破するのが難しいけど、Elixir/NxはMojoが約束することの多くをすでに実現してる。EXLAはXLAを通じてGPU/TPUコンパイルを提供し、Mojoのデモと同じくらいのパフォーマンスを出すし、ExplorerはPolarsを使ってデータフレームを扱える。さらに、Pythonxを使えば、必要な専門ライブラリを使うときにPythonを埋め込むこともできる。実際のMLサービスを構築してるなら(単にカーネルを最適化するだけじゃなくて)、Phoenix / LiveViewからNxまでを一つのスタックで極端な耐障害性のために構築する方が、ハードウェアから最後のパフォーマンスを引き出すより重要かもしれない。

Python以外に、上記の機能をすべて提供できるほどリッチなエコシステムを持つ言語はない。C++やJavaがリッチなエコシステムを持ってないとは信じがたい。良いグルー言語にはならないとは言わないけど、Pythonがこんなに人気になる前は、みんなそれらの言語で書いてたからね。

幸運なことに、Chrisは自分が何をしているか分かってるよ。 https://docs.modular.com/mojo/manual/python/

推論の面ではちょっと違う立場にいるんだ。孤立して構築するのは比較的簡単な、すごくチューニングされたCUDAカーネルがあって、そこで全ての魔法が起こるんだ。それに新しいCUTLASS 3のやつもあって、モダンC++なら簡単に呼び出せるしね。だけど、どんどん薄くなっていくtorchのクソみたいなものがあって、ほぼビルド不可能で、リファレンスカウントや壊れたsetup.pyを引きずり込んで、リアルなハッカーの世界からの上下の投影があるんだ。もう少しでそのゴミを押し出して、何でもリンクできるきれいで整ったC++プログラムができそうな気がしてる。

ポッドキャストやMojoに興味を持ってくれてありがとう!もっと知りたいなら、Mojoには多くのトピックをカバーしたFAQがあるよ(「Juliaをもっと良くするのはなぜか」ってのも含まれてるし :-)): https://docs.modular.com/mojo/faq/ Mojoにはたくさんのドキュメントもあるし、チェックできるオープンソースコードも何十万行もあるよ: https://github.com/modular/modular Mojoコミュニティは本当に素晴らしいから、ぜひ参加を考えてみてね。私たちのディスコースフォーラム: https://forum.modular.com/ やDiscordチャット: https://discord.com/invite/modular にも参加してみて! -クリス・ラトナー

ファンです。mojoについてのあなたのトークをたくさん見たけど、mojoが非常に高度なコンパイラ技術からどう利益を得ているかについて具体的な例を見たことがないんだ。ぜひ、そのことについてブログを書いて、できるだけ深く、ハードコアな技術を教えてもらえないかな?コンパイラの開発者じゃないから、たぶん20%くらいしか理解できないと思うけど、全体がどれだけ進んでいるのかを感じ始められたらいいな。

Swiftのおかげで、今まで使った中で一番いい言語の一つだと思う(ツール周りはちょっと残念だけどね)。それにGDScriptも、理由は色々だけどね^^

FAQは「Mojo Playgroundはまだ利用可能ですか?」って質問に対して、プレイグラウンドを指し示してるけど、プレイグラウンド自体は「次の25.6リリースで削除されます」って言ってるんだよね。だから「これが利用可能ですか?」っていうFAQの答えが、いつか削除されるって言ってるものを指し示すのはちょっとズレてる気がする。もしかして答えは「長くはない」ってことなのかな?

ねえクリス、ここで会えて嬉しいよ。Light Tableの重いキックスターターが実を結ぶのをまだ待ってるんだけど、何か進展ある?(本当に、これクールだね;こんなプロジェクトからどのくらいの持続性を期待できるのかな - どうやって確信できる?)

Chris LattnerがLex Fridmanのエピソード381(2023年6月2日)でめっちゃいい話してるよ。 - https://www.youtube.com/watch?v=pdJQ8iVTwj8 - https://open.spotify.com/episode/6flH0XxwdIbayoXTHOgAfI - https://podcasts.apple.com/us/podcast/381-chris-lattner-futu... 彼はこの番組に他にも2つのエピソードがあるよ: - https://www.youtube.com/watch?v=nWTvXbQHwWs(エピソード131、2020年10月18日) - https://www.youtube.com/watch?v=yCd3CzGSte8(エピソード21、2019年5月13日)

私はMojoの主要なターゲットオーディエンスで、すごく興味があるんだけど、例外を残しておいてほしくないな。このPythonの構文との後方互換性は過大評価されてて、90年代の言語の欠陥を持ち込むコストには見合わないと思う。例外が本当に嫌いだ。Java(FAANGで)や普通のPythonアプリケーションで、誰かが例外を正しく使っているのを見たことがないよ。Goのような明示的なエラーハンドリングや、Rustが提供する構文糖の方がずっと好きだな。

それで、ちょっと疑問なんだけど、例外の正しい使い方って何なの? Pythonではイテレータが終わりに達したら例外を投げるって言ってるけど、もし自分のカスタムCイテレータがそれをやったら間違いなのかな? やっぱり「for i in whatever: do(stuff(i))」みたいなのをやりたいんだけど…

Mojoの例外はResult型のための文法的な糖衣に過ぎないよ。使いたくなければ使わなくてもいいし、C++の例外のようなオーバーヘッドはないからね。

HNでこれを言うのはちょっとトロープ的だけど…なんでLispじゃないの?未来のMLコードはMLアルゴリズムによって書かれる(または少なくとも自然言語から「トランスパイル」される)と仮定すると、LispのS式は基本的にASTだから、機械が書くのに最も自然な言語になると思う。副次的な利点として、非常に機能が充実したREPLが標準になってるから、Pythonの代わりとしても適してる気がする。

LLMは括弧を正確に数えるのが苦手だよね。 ;)