見出し画像

Chris Lattner 氏のインタビュー動画の感想

LLVM、Clang、Swift、そして最近では Mojo 言語を絶賛開発中の Chris Lattner 氏のインタビュー動画が昨日 Youtube 上で公開され、その内容に感銘を受けたので、この記事に簡単にまとめてみる。

I Interviewed The Creator Of LLVM, Clang, Swift, and Mojo - YouTube


インタビュー内容

インタビュアー2人の引き出しが多く、Chris 氏が普段よりも饒舌に語っていたのが印象的な動画だった。
なお、各プロジェクトの技術的な詳細については深く触れられておらず、あくまで Chris 氏個人や Mojo の今後の展望についてもっと知りたいという人向け。

Q. PhD 時代について (LLVM 開発と普及)

Chris 氏本人曰く、大学院時代はあまり優秀な学生ではなく、論文を書くなどのアカデミックな活動は性に合わなかったとのこと。
イリノイ大学に移った後、担当教授からの指導 (nerd-sniping) により、当時開発していた LLVM に没頭することができたそうだ。
LLVM をバックエンドに用いたプログラミング言語は枚挙に暇がないが、とりわけインタビュー中に Rust が度々取り上げられ、LLVM のアイディアによって末尾再帰最適化が可能になったことを誇らしげに語っていた。

Q. Apple 社内で Swift 言語を広めるために取り組んだことは?

2010 年に週末プロジェクトとして Swift 言語の開発に取り組み始めた同氏ではあったが、すぐに社内で注目を集めたわけでなく、3 年近く開発を続けながら徐々に周囲の信頼を勝ち取っていたようだ。
(筆者注:時間軸が間違っていなければ、この時点で既に Objective-C / Clang の改善(block 構文や参照カウントの自動化など)で十分すぎる実績を積み上げている)

Apple 社が Swift への投資を決めた背景には、Bertrand Serlet や Craig Federighi らの理解のある優秀なトップ層に恵まれたことが大きかったとのこと。
当時、Swift について知っていた社員は 250 人程度で、多くの社員は 2014 年の WWDC で初めて知ることになった。
(この話は比較的有名ではあるが、何度聞いてもやっぱり面白い)

Q. 複雑性の段階的開示を Swift や Mojo にどのように適用していったか

複雑性の段階的開示 (progressive disclosure of complexity) とは、システムの理解度を上げるために複雑(あまり使われない高度な機能)なものを目前に公開せず、一段階の階層を挟み、遅らせて公開するデザインパターンのこと(例:もっとみるボタン)。

2014年当初の Swift 開発では、言語の複雑性を可能な限り奥部にしまい込み、初学者にも熟練者にも優しい設計を目指していたようだ。
しかし時が経つにつれ、SwiftUI 向けの特別構文 (Result Builders) や厳格なマクロ機能などが追加され、シンプルでない言語になってしまったことを、Chris 氏はやや残念そうに語っている。
Mojo ではその失敗から学び、不用意に機能を追加せず、実装すべき必須機能を優先する方針をとっている。

Q. Go 言語について:本当にシンプルな言語だと思うか?

Chris 氏は Go 2 のジェネリクス導入について、Go コミュニティが長い間ジェネリクスを導入せずに経験を積み、慎重に検討した結果、非常に良い結果になったと肯定的に述べている。
(この事例もまた、先述の複雑性の段階的開示の好例といえる)

Q. 関数型プログラミング(Ocaml, Haskell など)はなぜ人気が出ないのか?

回答は至って単純明快で、「現実のコンピューターの可変性を無視している」から。
こちらは、インタビュアーとのやり取りが面白いので、動画を直接観ることをおすすめ。

Q. 値セマンティクス (value semantics) はどこが優れているのか?

Swift では、関数型プログラミングの手法を一部取り入れつつ、value semantics(コピー意味論)を取り入れ、より安全な可変性を担保している。
(筆者注:常にコピーを取れば、片方を変更しても他方に影響が出ないので安全。また最近は Rust に倣い、所有権 (move / borrow) を opt-in で備えている)

Mojo についても同様で、複雑性の段階的開示を意識しながら、Python の動的性を前提に、静的型付けを opt-in していくようだ。

Q. Mojo を Python++ (C に対する C++) にしないために心がけていることは?

Chris 氏の回答は意外にも逆で、Mojo を Python++ にするのが目標とのこと。
(C と C++ が互いに異なる目標を持ちながらも共存して進化していった話を取り上げている)

Q. (現在も破壊的変更が多い) Python のバージョンについて、Mojo はどこまでサポートするのか?

既存の Python パッケージについては CPython を使って処理を行い、その他の変更については適宜対応していくとのこと。
本人曰く、Python の後置 if 文は好みでないが、互換性のために Mojo にも導入している。
また Swift でも成功を収めた、バージョンのマイグレーションツールを用意することで、Python コミュニティのコード移行を促進していく予定。

Q. なぜモチベーション高く次々とプロジェクトを立ち上げられるのか?そもそも、新しい構想を生み出す時間をどこで捻出しているのか?

「僕の注意機構には問題がある」と冗談を交えながら、8年以上同じプロジェクトを続けることが困難と述べた。

Q. Swift 言語開発の引き際を判断する際の思考プロセスについて

Swift 言語開発チームに優秀なエンジニアが集まり、自分よりも優れた結果を出していることで、安心して任せつつ離れることができたとのこと。
(対照的に、Google 時代 (Swift Tensorflow) では、一からモノを作ったことがない周囲のエンジニアを動かすことに一苦労したそうだ)

Q. Mojo は単なる MLIR における構文木?

そんな単純な話ではないよと言いたげにしながらも、丁寧に言葉を選びつつ、LLVM プロジェクト内の MLIR とは一線を画す話を上げており、Mojo への自信を伺わせた。

So it's part of the LLVM umbrella. It has all this super academic, crazy stuff in the project. And we use almost none of that. We don't use the MLIR dialects at all.
We've rebuilt the entire compiler stack from scratch. It is actually new technology.

また、話が前後するが、Mojo を開発する Modular 社のミッションについて、次のように熱く語っている:

What is our objective? Our objective is not just to build a unifying platform for this next generation heterogeneous compute,
CPUs, GPUs, accelerators, all these new things are so important to the world, but it's to beat the state of the art of the hardware vendors on their own chips.

MLIR 周辺の技術詳細について筆者は明るくないが、ともあれ目指しているレベルが凄まじいということだけは理解できた。

総括

Chris 氏とは過去に WWDC で何度かお話しする機会があり、その人柄の良さについて以前から存じ上げていたが、この動画では彼の前向きな姿勢と飽くなき探究心が一層際立っていて、大変見応えがあった。
様々なプログラミング言語が引き合いに出されながらも決して否定せず、全ての言語から学ぶ姿勢一つとっても、本当に頭が下がる。

個人的に、かれこれ 15 年間 iOS 開発を飽きずに続けてこれたのも、ひとえに彼の功績によるものと言っても過言ではない。
日頃の感謝の気持ちを込めてこの記事を書き終えつつ、今後の Mojo の進展を楽しみにしたい。


この記事が気に入ったらサポートをしてみませんか?