Goose:ヒープもGCも注釈も不要な新言語
原題: The Goose Programming Language
なぜ重要か
ライフタイム注釈なしでRustに匹敵する安全性と速度を両立するアプローチは、組み込み・OS・ゲームエンジン開発において新たな選択肢となりうる。
ソフトウェアエンジニアのWouter van Ooijenらが開発したシステムプログラミング言語「Goose」が公開された。ヒープアロケータ、ガベージコレクタ、ライフタイム注釈を一切持たず、16項目のベンチマークでC++比3.3倍、安全なRust比1.12倍の速度を達成したと主張。メモリ使用量もC++比1.9倍少ないとしている。コンパイル結果は単一のCファイルで、C言語と直接連携できる。
Gooseは「スタックのみ」というユニークなメモリモデルを採用する。動的な値はすべてコンパイラが管理するデータスタック上にインラインで配置され、スコープを抜けた瞬間に解放される。解放はポインタを1回ストアするだけで、100万要素の構造体も一撃で消える。
C++やRustとの最大の違いは参照の扱いだ。配列が成長してもその内部への参照は無効にならない。C++が予約を強いられ、safe Rustがu32インデックスで代用する場面でも、Gooseは型付き参照をそのまま使い続けられる。これがベンチマーク上の速度差の主因だとしている。
メモリ効率も特徴的だ。文字列や可変長フィールドを持つレコードの配列は、ポインタを含まない1つの連続ブロックとして格納される。C++で160バイト+ヒープアロケーションになる構造体が、Gooseでは29バイト・アロケーションなしで済むと説明する。
列挙型(Enum)も設計が異なる。「Variable-mode ADT」は各値を最大バリアントではなく自身のバリアントのサイズで保持するため、Rustのenumと比較して同ベンチマーク上でメモリ4分の1、速度2倍を実現したとしている。
相対参照(リンク)機能により、構造体は1〜4バイトのオフセットで内部リンクを持てる。これはポジション独立なのでデータ構造がそのままファイルフォーマットになり、保存はwriteシステムコール1回、読み込みはreadと検証パスだけで済む。
エラーハンドリングは独自構文「return err from load」で複数フレームを一気に抜けられる。アンワインダー不要、ResultやOperatorも不要だ。スレッドモデルはメモリを共有しない設計で、ワーカーは独立したプログラムとしてコンパイルされ、値はmemcpyでキューを経由する。データレース・ロック・アトミック操作が言語レベルで存在しない。
コンパイル出力はCファイル1枚。Cコンパイラが動く環境ならどこでも動き、extern fn経由でCを直接呼び出せる。現在はベータ段階で、公式サイトではチュートリアル・仕様書・ベンチマーク結果・標準ライブラリを公開している。