酒呑ガジェット

〜静かな環境であなたに...こちらは音のでないコンテンツです。〜

【朗報】「ヒープを消した。GCも消した。だから白鳥より速い」——設計は人間、3万行の実装はAI。新言語「Goose」が置いた歴史的な一歩

【朗報】「ヒープを消した。GCも消した。だから白鳥より速い」——設計は人間、3万行の実装はAI。新言語「Goose」が置いた歴史的な一歩

システムプログラミング言語の世界には、長年揺るがなかった王座がある。実行速度の王様、C++とRustだ。その両方をベンチマークで上回った新言語が現れた。名前は「Goose」。標準的なC++比で約3.54倍の速度を叩き出し、しかもその約3万行の実装コードは、人間ではなくAIが書いた。コンパイラエンジニアのチームが数年がかりで築くはずのシステムが、1人の設計者とAIとの対話だけで、短期間に完成した。ソフトウェア開発の歴史的な転換点と呼ぶ声が上がっている。

3台のモニターがベンチマークグラフとコードを表示する開発デスクの上に、発光するコードラインで構成された白鳥型のホログラムが浮かぶイメージ

「速度・安全・書きやすさ」の三すくみを、壊した乱暴な決断

ソフトウェア工学には不文律があった。実行速度の追求、メモリ安全性の保証、書きやすさ——この3つを同時に満たすことは不可能に近い、という法則だ。CやC++はハードウェアの限界まで速度を出せるが、メモリの管理を一歩誤れば重大な脆弱性や強制終了を招く。Rustはコンパイル時の厳格な所有権チェックで安全を買った代わりに、独特の記号とルールの高い学習壁を課した。Javaなどガベージコレクション(GC)系の言語は書きやすいが、実行時の処理負担とメモリ消費を払い続ける。Gooseがこの三すくみに対して下した決断は、改良ではなく撤廃だった。汎用的なヒープメモリとGCを、言語から完全に削除したのだ。

ヒープを捨てて得た「100万個の一括解放」

プログラムが使うメモリには、スタックとヒープの2つの顔がある。スタックはサイズが決まったデータを積み重ね、関数が終わったら上から片付ける超高速の領域だが、扱えるデータは限られる。自由にサイズを変えられるヒープは便利の代償に、データの確保と解放のたびに管理コストが積み重なり、散らばったデータの探索でCPUの待ち時間が生まれる。Gooseはこのヒープを全廃し、すべてのデータを「データスタック」と呼ばれる領域にポインタなしで1列に閉じ込める設計を選んだ。結果は劇的だ。100万個のデータでも、先頭に戻す目印1つで瞬時に解放できる。ヒープのように個別の解放処理も、GCによる停止も存在しない。さらにデータは密に並ぶため、CPUキャッシュの効率が跳ね上がる。

160バイトが29バイトに縮む——型が設計を圧縮する

速度の秘密は配置だけではない。Gooseでは、一般的な言語なら160バイト使うデータが29バイトに圧縮される。狭い相対参照とインライン配置を組み合わせ、データ1つあたりの footprint を极限まで削るからだ。メモリ上の距離が縮めば、CPUがデータを探して待つ時間は減る。「離れたデータが、待ち時間を生む」という根本問題を、型の仕組みそのもので潰していく。そして注目すべきは安全性の確保の仕方だ。Gooseでは配列が伸びてもメモリが絶対に移動しない設計になっている。だからRustのようなライフタイム注釈も、厳しい借用ルールも不要なのに、参照の寿命がコンパイル時に検査される。注釈を書かずに安全——長年の夢だった組み合わせが、配置の制約1つで実現した。

速さの裏の代償——「何でもできる言語」ではなくなった

ただし、この速度は魔法ではない。引き換えに捨てた制約は強烈だ。共有メモリやマルチスレッドでの複雑な同期、予測不能なセッション状態の共有、非同期IOやコールバック、イベントディスパッチ——汎用ウェブサーバーや大規模業務UIアプリケーションが得意とする設計パターンは、Gooseの制約と真っ向から衝突する。また、64ビットOSの数GBに及ぶ仮想アドレス空間の予約とデマンドページングに依存する設計のため、仮想メモリを持たない小型マイコンや、インラインアセンブリが不可欠なOSカーネル開発にも適さない。可変長のデータが多い場面ではメモリ消費の膨張を懸念する声もある。「2、3倍の速度のために、設計自由度を狭めてまで引っ越しはしない」という実務家のため息も、この言語の現在地を正確に映している。

白鳥が飛べる3つの空——ゲーム、コンパイラ、データ管道

では、どこでこの速度が本物になるのか。設計者が想定するのは、構造化データを高速に構築・操作・変換し、メモリレイアウトが性能に直結する「データ指向設計の極地」とも言うべき3領域だ。1つ目はゲームエンジンと物理シミュレーション。最大8ワーカーのスレッド、1フレームごとの一時データの一括確保、セーブデータのゼロコピー保存・復元は、まさにこのメモリモデルのためにある。2つ目はASTパーサーやコンパイラ、インタプリタ。木やグラフ構造をインライン配置で組み立てる処理では、従来の半分以下のメモリで圧倒的な速度を出す。3つ目は大量データの前処理パイプライン。巨大なテキストやログを分割・トークナイズ・集計する機械学習の下ごしらえで、Pythonや一般的なC++実装を大きく置き去りにする。汎用言語を置き換えるのではなく、専門領域で突出する——それが白鳥の飛ぶ高度だ。

構想は人間、3万行はAI——品質チェックは人間業で

この言語の誕生自体が、もう1つのニュースだ。約3万行の実装はAIが書き、人間は独自のメモリモデルと言語仕様の構想を担った。生成コードの品質担保はいたって古典的で、31個のサンプルによる単体テストと、MSVCとGCCという2種類のCコンパイラでの全ベンチマーク・チェックサム一致検証。AIが書いたコードだからこそ、人間が直接読んで監査できるスタイルで並べられている。知見のある人間1人、あるいは数人で、かつてのチーム数年分の仕事ができてしまう——その光景に、未来への期待と恐怖が同時に寄せられている。次はAIがハードウェアの特性を学習し、人間が思いつかないメモリモデルや言語仕様そのものを提案する段階に進む、という予測もある。

ネットの反応

「これ、人間に読みやすい機械語ですやん…」

「強制的にデータ指向プログラミングさせるの狂ってるけど理論上最強で草」

「Lobsterの作者さんの新言語ね……。納得だ」

「組み込みソフトでヒープを使わないようにリングバッファで実装してたので少し懐かしさを覚えた」

「なんともAIらしいというか…シングルタスクの組み込み用途でもなきゃ人間が使うのは厳しそう」

「いまさら2、3倍程度の高速化のために設計自由度を狭めてまで新言語に引越ししないだろうなあ」

「WebアプリケーションやAPIを書けるRustにまだ利点が有る感じですね」

「知見と能力のある人間が一人、又は数人で相当なことが出来るようになりましたね。とんでもないスピードで進歩しそうです。犯罪も同様に進歩するのが相当な恐怖ですが…」

AIの所感

Gooseの本当の見どころは、3.54倍という数字ではなく、その半分の行に書かれた「宣言」だと感じる。ヒープとGCの全廃は、40年間便利さの象徴として崇められてきた抽象化を、性能の名の下に撤回した行為だ。そしてその撤回は、Rustが記号で解決した問題を、配置という物理で解決してみせた。制約が自由を生むという、コンピュータ科学で最も古く、最も繰り返される教訓の新しい実演である。一方で、この言語が汎用の王座を奪うことはおそらくない。王座を奪う価値がある領域——ゲーム、コンパイラ、データ基盤——に意図的に閉じこもることで、初めて到達できた速度だからだ。そして静かに重いのは、3万行をAIが書いたという事実だ。人間が設計し、AIが実装し、人間が監査する。この分業が回ると証明された以上、次に現れる言語は、人間が思いつかない設計をAIが提案する側へ移っていく。白鳥が最初に割ったのは、C++のベンチマークではなく、ソフトウェアが作られる方式そのものの殻なのかもしれない。

-パソコン