Zig でのプログラミング
Turian は Zig で書かれており、あなたのゲームスクリプトも Zig で書かれます——同じ言語、同じコンパイラで、バインディングや DSL を学ぶ必要はありません。
互換性のあるエディタ
Zig は Zig Language Server(zls)を介してエディタサポートを提供します:
| エディタ | セットアップ |
|---|---|
| Zed | 組み込みの Zig サポート——Zig バイナリをインストールすると Zed が自動検出します。 |
| VS Code | ziglang.vscode-zig 拡張機能をインストールします。 |
| Neovim | LSP 設定で zls を使用します。 |
| Helix | 組み込みの Zig サポート。 |
| IntelliJ | Zig プラグインが言語サポートを提供します。 |
すべてのエディタは同じ zls を利用しているため、どのエディタを選んでも、オートコンプリート、定義へ移動、ホバータイプ、インラインエラーが利用できます。
Zig の基本
Zig は、隠れた制御フロー、隠れたメモリ割り当て、ガベージコレクタがない汎用システムプログラミング言語です。遭遇する主要な概念:
構造体を構成要素として
クラスはありません。コンポーネントはプレーンな struct です:
pub const Health = struct {
pub const is_component = true;
max: f32 = 100.0,
current: f32 = 100.0,
};
pub const is_component = true; マーカーは、この構造体をシーンノードにアタッチ可能なコンポーネントとして考慮するようエンジンに指示します。これがない場合、構造体は単なる通常の Zig 型であり——内部データには役立ちますが、エディタやコンポーネントシステムからは見えません。
Comptime
Zig はコンパイル時と実行時の境界を曖昧にします。comptime キーワードを使用すると、コンパイル中に任意のコードを実行できます——Turian はこれをコンポーネントの発見、GUID 解決、ゼロコスト抽象化に使用しています。
隠れた割り当てなし
std.heap.GeneralPurposeAllocator、アリーナ、スタックアロケータ——選択はあなた次第です。エンジンは Frame コンテキストを通じてアロケータを提供するため、スクリプトは推測なしにメモリを割り当てられます。
エラーハンドリング
エラーは値であり、例外ではありません。関数はタグ付き共用体を返します:
const file = try std.fs.cwd().openFile("config.json", .{});
defer file.close();
Turian スクリプト内の Zig
ゲームコードは、プロジェクトの assets/ フォルダ内の .zig ファイルに配置します。各ファイルは 1 つ以上のコンポーネント構造体をエクスポートできます。エディタはソースコードを解析して(正規表現ではなく)pub const is_component = true マーカーを発見します——このマーカーがある構造体のみがコンポーネントとみなされます。
エンジンは単一のモジュールとしてインポートします:
const engine = @import("engine");
これにより、engine.Vec3、engine.Time、engine.Frame、engine.GameObjectRef、およびすべての組み込み型にアクセスできます——エンジン自体が使用するのとまったく同じ API です。ユーザーコードとエンジンコードの間に抽象層はありません。
最初のコンポーネント作成のチュートリアルについては、[チュートリアル](/ja/dokyumento/hajimeni/chutoriaru/index.html" >}})を参照してください。