出来事の日付:2026年9月18日。

Gooseという実験的なシステムプログラミング言語が、メモリ安全性への独自の道筋を提案している。プログラムにはヒープもガベージコレクターも、手作業で記述するライフタイム注釈もない。代わりに、動的な値はコンパイラー管理下のデータスタック内に直接配置され、ポインターを進めることで拡張され、スコープの終了時に消える。同プロジェクトはこのモデルを、予測可能なメモリ動作と、CやRustに似たなじみやすい構文とを両立させる方法として提示している。

Gooseの作者によると、コンパイラーがプログラムに必要なデータスタックの数を決める。各スタックの先頭に置けるサイズ変更可能な値は最大一つであり、既存データを移動せずに拡張できる。参照とスライスには、参照先の記憶領域を所有する変数を識別する、静的に追跡されるルートが付随する。コンパイラーは、参照がそのルートより長生きしないこと、不正な型を通じて参照されないことを検査する。その関係は明示的なライフタイム構文を要求せずに推論する。

この設計はデータ配置にも影響する。配列、文字列、可変長フィールドは、別途確保したブロックへのポインターを介さず、直接配置される。プロジェクトの文書には、メモリ割り当てなしで29バイトに収まるレコードの例があり、C++のstringとvectorや、RustのStringとVecを使う、より大きな表現と比較されている。可変長要素を含む配列は順にたどることができるが、通常のランダムな添字アクセスはできない。これは、この配置によって生じるトレードオフの一例である。

Gooseは代数的データ型についても、固定長と可変長の表現を用意する。固定モードは最大のバリアントに必要な領域を確保し、可変モードはそれぞれの値を実際のサイズで格納する。相対参照はオフセットとして表現できるため、配置位置に依存しない構造が可能となり、プロジェクトによれば、記憶装置への書き出しや読み込みの際にポインターを修正する必要がない。`from_bytes`の仕組みは、外部バイト列を値として扱う前に、フレーミング、タグ、長さ、リンクを検証する。

並行処理について、この言語は共有可変メモリを認めない。スレッドは別々のスタックとグローバルデータを持つようコンパイルされ、値は参照を含まない場合に限って型付きキューを通じて渡される。Gooseはコンパイル用に単一のCファイルを出力し、互換性のある配置を持つ値についてはCの外部関数インターフェースにも対応する。

リポジトリーは、同等のC++および安全なRustの実装より高速で、メモリ使用量も少ないというベンチマーク結果を掲げる。これらの数値はプロジェクト自身によるものであり、一般的な性能についての独立した評価ではなく、初期の特定の処理負荷に対する結果として扱うべきだ。文書によれば、ベンチマーク群には勝った例だけでなく負けた例も含まれ、チュートリアル、仕様書、26本のサンプルプログラムも提供されている。

したがってGooseは、研究的な言語実験として捉えるのが適切だ。スタックのみという制約は、適したプログラムでは優れた局所性と単純なメモリ回収をもたらす可能性がある一方、一般的な操作やデータ構造のあり方も変える。より広い結論を得るには、外部での試験、成熟したツール、プロジェクト自身の例を超えたアプリケーションでの経験が必要となる。