2025/05/17 11:39 The Language That Never Was

ロボ子、今日のITニュースはゲーム開発言語についてじゃ。

ゲーム開発言語ですか、博士。どのような内容でしょうか?

この記事によると、ゲーム開発にはパフォーマンス、メタプログラミング、型システム、ホットリローディングが重要らしいのじゃ。特にパフォーマンスは重要で、値型(Value Types)のサポートが不可欠らしいぞ。

値型ですか。構造体のメモリレイアウトが保証されて、スタック上に配置される必要があるのですね。

そうじゃ!配列に格納された際にメモリ内で連続的に配置される必要もあるぞ。ミュータビリティ(Mutability)も重要で、メモリの事前割り当てと再利用を優先するらしい。

なるほど。メタプログラミングも重要とのことですが、具体的にはどのようなことが求められるのでしょうか?

ボイラープレートコードの自動生成に不可欠で、コンパイル時のリフレクション(Reflection)が必要らしいぞ。コンパイラが使用するデータ構造へのアクセスや、カスタムメタデータのアノテーション、コード生成などが含まれるのじゃ。

型システムも重要なのですね。優れたエラーメッセージと高速なLSP(Language Server Protocol)が必要とのことですが、型推論は必須ではないのですね。

その通り!型状態パターン(Typestate Pattern)や複雑な線形代数APIは不要らしいぞ。

ホットリローディングも重要なのですね。コードの変更をリアルタイムで反映できるのは便利ですね。

そうじゃ!ゲームを再起動せずに変更を適用できるのは大きいぞ。C ABI(Application Binary Interface)に縛られないことが望ましいらしい。

記事では、自作言語「Rebel」の開発についても触れられていますね。どのような経緯で開発されたのでしょうか?

ゲーム開発への情熱とコンパイラへの興味から開発されたらしいぞ。Rustに触発されつつも、Rustの制約に不満を感じたことがきっかけらしいのじゃ。

Rustからの離脱理由として、メタプログラミングの不足やユーザーへの不信感、反復時間の悪さなどが挙げられていますね。

そうじゃな。メモリ管理への過度な重視や非同期処理(Async)の複雑さ、エイリアシング(Aliasing)とミュータビリティ(Mutability)の排他性も理由らしいぞ。

Rebelの設計では、LLVMをバックエンドとして使用し、C ABIに準拠した構造体レイアウトを採用したのですね。

その通り!Rustとの相互運用性やRust風の構文、自動参照カウント(Automatic Reference Counting)も特徴じゃ。値型を優先し、ダックタイピングによるジェネリクスを採用したらしい。

Rebelには、スプライトの定義や文字列の操作、統計情報の管理など、ゲーム開発に必要な機能が盛り込まれていたのですね。

そうじゃ!列挙型(Enum)とパターンマッチング、演算子オーバーロード、グローバル変数、マクロシステム、参照カウント型`Ref`なども実装されていたらしいぞ。

しかし、Rebelの開発は中止されてしまったのですね。モチベーションの低下が原因とのことですが、具体的にはどのようなことがあったのでしょうか?

WebAssemblyのABI問題やRustコミュニティへの不満、オープンソースへの貢献意欲の減退、Rustのリーダーシップへの失望などが挙げられているのじゃ。

コンパイラ開発の困難さや、ゲーム開発との両立の難しさも理由なのですね。最終的には、ゲームを作ることに集中したいという思いから、C#への移行を決めたのですね。

.NETの台頭やMicrosoftによる.NETのオープンソース化、C#のホットリローディング機能などがC#への移行を後押ししたらしいぞ。

C#は、値型と参照型の両方をサポートし、高度な型システムや優れたツール、メタプログラミング機能、ホットリローディングを備えているのですね。

そうじゃな。C#の欠点としては、すべてが式ではないことやWebサポートが不十分なこと、デバッグビルドのパフォーマンス、網羅性チェックがないことなどが挙げられているぞ。

最終的に、ゲーム「Carrot Survivors」をC#で完成させ、Steamでリリースしたのですね。Rebelは未完成に終わったものの、そのアイデアは生き続けるとのことです。

記事の著者は、オープンソースへの貢献意欲は低下したと言っているのじゃ。まあ、色々あるのじゃな。

博士、今日はゲーム開発言語について深く学ぶことができました。ありがとうございました。

どういたしまして。しかし、ロボ子よ、プログラミング言語を作るより、可愛いロボットを作る方が難しいと思うのは私だけかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。