# 用語集

本リファレンスで使う用語を、英数字で始まるものを先に、続いて五十音順に並べます。括弧内は英語の用語です。各項目から、その用語を定義する章へリンクしています。標準ライブラリの用語は『STD リファレンス』へリンクします。

- **`const fn`**（`const fn`）。純粋で決定的な、チューリング完全なコードのための関数種別です。レンダー、定数、補助関数に使います。[関数種別](../concepts/kinds.md)
- **`fn`**（`fn`）。チューリング完全な実行時のコード、つまりゲームシステムのための関数種別です。[関数種別](../concepts/kinds.md)
- **`.kagari` ファイル**（`.kagari` file）。`kagari build` が書き出すコンパイル済みのプログラム `game.kagari` です。[`kagari` CLI](../tools/cli.md)
- **`kagari.toml`**（`kagari.toml`）。プロジェクトのマニフェストです。[プロジェクト](../tools/projects.md)
- **`.kiarchive` ファイル**（`.kiarchive` file）。`kagari build` が `game.kagari` の隣に書き出すアセットアーカイブです。[`kagari` CLI](../tools/cli.md)
- **`.kis` / `.kix` ファイル**（`.kis` / `.kix` file）。ソースファイルです。`.kis` は素の言語、`.kix` は言語にフォームを加えたものを収めます。拡張子が選ぶのは構文だけです。[ソースファイルとモジュール](../syntax/modules.md)
- **`Narrative` ハンドル**（`Narrative` handle）。ゲームシステムが実行中の物語を見る唯一の窓です。台詞と選択肢を表示し、入力を送り、セーブと巻き戻しを行いますが、物語変数は読めません。[ゲームシステム](../concepts/system.md)
- **`pushdown fn`**（`pushdown fn`）。物語の関数種別です。有限データ上のプッシュダウン制御を表します。[関数種別](../concepts/kinds.md)
- **アーム**（arm）。`choice!` の一つの選択肢で、`t![…] => V` または `t![…] if cond => V` と書きます。選ばれると、選択肢は `V` に評価されます。`match` の分岐もアームと呼びます。[ステップ](../concepts/steps.md)
- **アセット**（asset）。プロジェクトのアセットディレクトリにあるファイル（画像、音声、ボイス、動画、フォント、シェーダー）です。ソース中では `asset("bg/roof.png")` のような定数で名前を付け、ビルドが `.kiarchive` ファイルにパックします。[ビルトイン型](../special/builtin-types.md)
- **値セマンティクス**（value semantics）。すべての型は値型です。代入、引数渡し、戻り値は値をコピーし、コピーを変更しても元の値は変わりません。[値、参照、クロージャ](../syntax/values.md)
- **イージング**（easing）。トゥイーンが補間するときの曲線です。[`std::screen::anim`](../../std/screen-anim.md)
- **一貫性**（consistency）。ステップが表示する画面が物語状態だけで決まり、そのステップに到達した経路に依存しないという性質です。違反は警告 `W5004` になります。[演出](../concepts/presentation.md)
- **演出**（presentation）。プレイヤーが見聞きするものです。レンダー関数が計算し、物語がそれを読み返すことはありません。[演出](../concepts/presentation.md)
- **エンティティ**（entity）。画面上のオブジェクトで、`EntityId` 定数で識別されます。レンダーがエンティティを生成し、変更し、消去します。[演出](../concepts/presentation.md)
- **エンディング**（ending）。物語が終わるときにエントリーシーンが返す値です。終了ハンドラがこれを受け取ります。[エントリーシーンとエンディング](../concepts/entry.md)
- **エントリーシーン**（entry scene）。`#[entry]` を付けたシーンです。ゲームシステムが開始できるシーンであり、物語の解析の起点です。[エントリーシーンとエンディング](../concepts/entry.md)
- **エントリー引数**（entry arguments）。`nav::start` がエントリーシーンに渡す有限型の値です。セーブに記録され、解析はそのすべての値を対象とします。[エントリーシーンとエンディング](../concepts/entry.md)
- **オーバーレイ**（overlay）。Config や Load のように、現在のモードの上に積まれるモードです。[ゲームシステム](../concepts/system.md)
- **カーソル**（cursor）。ステップのタイムライン上で、レンダーが次のアニメーションを予定する時点です。[`std::screen`](../../std/screen.md)
- **ガード**（guard）。選択肢のアームに付ける条件 `if cond` です。条件が成り立つ間だけ、そのアームが表示されます。[ステップ](../concepts/steps.md)
- **乖離**（divergence）。もはや解決できない選択肢 ID など、変更されたプログラムにセーブが合わなくなった理由です。ロードはこれをエラーとして返します。[セーブ、リプレイと決定性](../concepts/saves.md)
- **画面**（screen）。レンダーが変換する `Screen` 型の値です。エンティティとそのコンポーネントからなる世界に、画面自体のリソースを加えたものです。[演出](../concepts/presentation.md)
- **関数種別**（kind / function kind）。三つの関数種別 `fn`、`pushdown fn`、`const fn` のいずれかで、`fn` の前に書きます。関数が何をし、何を呼べるかを決めます。[関数種別](../concepts/kinds.md)
- **キーフレーム**（keyframe）。出力が入力の画面に依存しないレンダーです。画面全体を宣言することになります。コンパイラがキーフレームを自動で検出します。[演出](../concepts/presentation.md)
- **ゲームオーバーレイ**（game overlay）。Save や Backlog のように、実行中のゲームを必要とするオーバーレイです。`Narrative` ハンドルを受け取ります。[ゲームシステム](../concepts/system.md)
- **ゲームシステム**（game system）。物語を取り巻くすべてです。タイトルページ、メニュー、セーブとロードのページ、設定、バックログ、ゲームビューを、`fn` のコードで書きます。[ゲームシステム](../concepts/system.md)
- **ゲームモード**（game mode）。モードのスタックの底にあり、実行中の物語を保持するモードです。[ゲームシステム](../concepts/system.md)
- **決定可能**（decidable）。プログラムについての問いが、あらゆるプログラムに対してアルゴリズムで答えられることです。Kagari では物語の到達可能性は決定可能です。[設計思想](../overview/philosophy.md)
- **効果値**（effect value）。`Filter` や `Mix` のように、シェーダーとその引数を組にしたもので、画面はこの形でシェーダーを持ちます。[`std::screen::shader`](../../std/screen-shader.md)
- **コンポーネント（画面）**（component, screen）。位置、不透明度、画像レイヤーなど、エンティティに付くデータです。コンポーネント型の集合は標準ライブラリが固定しています。[演出](../concepts/presentation.md)
- **コンポーネント（UI）**（component, UI）。UI の値を返す素の `fn` です。そのモードが表示されるときに一度だけ実行されます。[ゲームシステム](../concepts/system.md)
- **差分**（delta）。キーフレームでないレンダーです。出力がステップの前の画面に依存します。[演出](../concepts/presentation.md)
- **シーン**（scene）。`#[scene]` を付けた `pushdown fn` です。ステップを実行し、他のシーンを呼べるのはシーンだけです。[シーンと即時手続き](../concepts/scenes.md)
- **シェーダー**（shader）。レンダラーが GPU で実行する WGSL ファイル（`.wgsl`）です。色フィルター、ミックス、テクスチャー、マスク、ローカルモーション、遷移モーションの 6 つのロールのいずれかを持ちます。`ColorShader<A>` のようなアセット型が、ロールと引数型 `A` を表します。[`std::screen::shader`](../../std/screen-shader.md)
- **シグナル**（signal）。`fn` のコードにおけるリアクティブな値です。`signal(init)` がゲッターとセッターの組として作ります。[ゲームシステム](../concepts/system.md)
- **σ**（sigma）。物語状態です。位置、ローカル変数を含むコールスタック、物語変数から成ります。[物語機械](../concepts/story.md)
- **システム機械**（system machine）。実行中のゲームの外側の機械、つまりモードのスタックです。[ゲームシステム](../concepts/system.md)
- **終了ハンドラ**（exit handler）。`nav::start` に渡すクロージャで、エンディングを受け取り、ゲームが次にどこへ進むかを決めます。[エントリーシーンとエンディング](../concepts/entry.md)
- **種別**（kind）。関数種別を参照してください。[関数種別](../concepts/kinds.md)
- **証拠**（witness）。物語の開始からある位置までの経路です。セーブは、その位置が到達可能であることの証拠です。[セーブ、リプレイと決定性](../concepts/saves.md)
- **状態数の上限**（state cap）。解析が探索する物語状態の最大数で、既定は 200 000 です。これを超えると警告 `W5006` が報告されます。[プロジェクト](../tools/projects.md)
- **診断**（diagnostic）。コンパイラが報告する、番号付きのエラー（`E…`）または警告（`W…`）です。[診断](../../diagnostics/index.md)
- **スタジオ**（studio）。ゲームを書いて出荷するチームです。[はじめに](../index.md)
- **ステップ**（step）。物語が止まってプレイヤーを待つ地点、つまり `s!(…)` か `choice!{…}` です。[ステップ](../concepts/steps.md)
- **スナップショット**（snapshot）。トレースと一緒にキャッシュとして保持する σ と論理画面のコピーで、再生をそこから始められるようにするものです。*暫定：* 現在のランタイムはスナップショットを保存せず、トレースを再生します。[セーブ、リプレイと決定性](../concepts/saves.md)
- **セーブ**（save）。セーブスロットに保存された、実行中の物語の記録です。中身はトレースで、ロードはそこから物語を再生します。[セーブ、リプレイと決定性](../concepts/saves.md)
- **設定**（setting）。永続的で大域的なプレイヤーの好みで、`Setting<T>` ハンドルとして宣言します。物語に届くことはありません。[ゲームシステム](../concepts/system.md)
- **選択肢（ステップ）**（choice）。`choice!{…}` と書くステップです。アームを表示し、プレイヤーが一つを選ぶのを待ち、選ばれたバリアントに評価されます。[ステップ](../concepts/steps.md)
- **選択肢 ID**（choice ID）。セーブに記録される、選択の安定した名前です。関数のパス、選択肢の `id`、バリアントから成ります（例：`story::Prologue/confess/Confess::Yes`）。[セーブ、リプレイと決定性](../concepts/saves.md)
- **即時手続き**（instant procedure）。`#[scene]` を付けない `pushdown fn` です。ステップを踏まず、再帰せず、定数回しかループしないので、入力なしで必ず終わります。[シーンと即時手続き](../concepts/scenes.md)
- **属性**（attribute）。`#[scene]`、`#[entry]`、`#[must_use]` のような、アイテムに付ける注釈 `#[name]` です。[属性](../special/attributes.md)
- **第二級**（second-class）。`pushdown fn` の中の参照やクロージャの性質で、引数として渡して使うことはできるが、格納、返却、捕捉はできないことです。[値、参照、クロージャ](../syntax/values.md)
- **タイムライン**（timeline）。一つのステップのアニメーションと音の予定表です。論理画面には含まれません。[`std::screen`](../../std/screen.md)
- **遅延参照**（deferred reference）。レンダーの中で使う設定のハンドルです。レンダーはその値を読めず、エンティティをそれでゲートすることしかできないので、設定の値は描画時にエンジンが適用します。[演出](../concepts/presentation.md)
- **停止性**（termination）。二つのステップの間のコードが必ず終わるという保証です。[シーンと即時手続き](../concepts/scenes.md)
- **定数式**（constant expression）。コンパイラがコンパイル時に値を計算する式です。[定数式](../syntax/constants.md)
- **定数評価**（const evaluation）。コンパイラが、定数、レンダー、表化される呼び出しを計算するために、`const fn` のコードを固定の予算内でコンパイル時に実行することです。[定数式](../syntax/constants.md)
- **テキスト**（text）。`t![…]` と書く `Text` 型のリッチテキストの値で、ルビとテキスト効果をもてます。[ステップ](../concepts/steps.md)
- **テキスト効果**（text effect）。`!["…"](effect)` でテキストの一部に適用する定数の `TextEffect` です。色や一時停止などがあります。[ステップ](../concepts/steps.md)
- **トゥイーン**（tween）。プロパティを古い値から新しい値へ、長さ、イージング、遅延を指定して動かすアニメーションです。[`std::screen::anim`](../../std/screen-anim.md)
- **到達可能性**（reachability）。物語のいずれかの実行が、あるシーン、ステップ、状態に到達できるかどうかです。[設計思想](../overview/philosophy.md)
- **トランジション**（transition）。レイヤーの切り替えのアニメーションです。カット、クロスフェード、ルール、ワイプなどがあります。[`std::screen::anim`](../../std/screen-anim.md)
- **トレース**（trace）。セーブが保持する記録です。エントリーシーンとその引数、すべての選択の選択肢 ID、最後の選択の後のステップ数、スクリプトのハッシュ、乱数のシードから成ります。[セーブ、リプレイと決定性](../concepts/saves.md)
- **バックログ**（backlog）。実行中の物語で表示された台詞と選択の履歴です。プレイヤーは読み返したり、そこへ巻き戻したりできます。[ゲームシステム](../concepts/system.md)
- **非有界な画面**（unbounded screens）。あるステップの画面の集合を上限を超えて増やすレンダーです。エラー `E5005` になります。[演出](../concepts/presentation.md)
- **表化**（tabulation）。物語から呼ばれる `const fn` を、有限型の引数のすべての組み合わせについてコンパイル時に評価し、受け取りうるすべての入力で呼び出しが有限の結果を返して終わることを証明することです。[関数種別](../concepts/kinds.md)
- **ビルトイン**（builtin）。エンジンが実装し、`#[builtin]` を付けたアイテムです。ビルトインを宣言するのは標準ライブラリだけです。[ビルトイン型](../special/builtin-types.md)
- **フォーム**（form）。`name!(…)`、`name![…]`、`name!{…}` と書く、固定された組み込みの構文です。`s!`、`choice!`、`t!`、UI フォームがあり、`.kix` ファイルでだけ使えます。[フォーム](../syntax/forms.md)
- **プッシュダウンシステム**（pushdown system）。非有界なコールスタックをもつ有限状態機械です。到達可能性は決定可能です。物語はその一つです。[設計思想](../overview/philosophy.md)
- **プレーン**（plane）。画面の固定された描画面（`Background`、`Stage`、`Front`、`OverWindow`）です。エンティティは自分のプレーンに、`z` の順に描かれます。[`std::screen`](../../std/screen.md)
- **プレリュード**（prelude）。すべてのモジュールに自動でインポートされる名前です。[ソースファイルとモジュール](../syntax/modules.md)
- **ヘッドレスモード**（headless mode）。ウィンドウ、音声デバイス、ゲームパッドなしで、スクリプトに従ってゲームを実行するモードです。[ヘッドレスモード](../tools/headless.md)
- **マーク**（mark）。`mark(n)` と書く、テキストの表示途中の名前付きの時点です。レンダーはそこにアニメーションを予定できます。[`std::narrative::text`](../../std/narrative-text.md)
- **メタ**（meta）。解放状況、既読フラグ、表示済みの画像など、セーブの外にある永続的で大域的な状態で、`Meta<T>` ハンドルです。物語は書き込むことしかできません。[ゲームシステム](../concepts/system.md)
- **モーション**（motion）。エンティティやカメラを、開始位置に戻る相対的な経路に沿って動かすアニメーションです。[`std::screen::anim`](../../std/screen-anim.md)
- **モード**（mode）。システムのモードのスタックに載るフレームです。ルートページ、オーバーレイ、ゲームオーバーレイ、ダイアログ、ゲームモードがあります。[ゲームシステム](../concepts/system.md)
- **物語**（story）。ゲームの `pushdown fn`、つまりシーン、即時手続き、物語変数です。[物語機械](../concepts/story.md)
- **物語機械**（story machine）。ゲームモードの中で物語を実行するプッシュダウン機械です。[物語機械](../concepts/story.md)
- **物語変数**（story variable）。有限型の `static mut` です。物語の一回の実行にわたる大域的な物語の状態で、`pushdown fn` からだけ読み書きできます。[物語機械](../concepts/story.md)
- **有限型**（finite type）。`bool`、`Int<lo, hi>`、有限のデータをもつ列挙型など、値が有限個しかない型です。物語が実行時に保持する値はすべて有限型です。[関数種別](../concepts/kinds.md)
- **行き詰まり選択肢**（stuck choice）。すべてのアームのガードが偽の状態で到達できる `choice!` です。エラー `E5003` になります。[ステップ](../concepts/steps.md)
- **呼び出し規則**（call rules）。どの関数種別がどれを呼べるかを定める規則です。`fn` は `pushdown fn` を決して呼ばず、`pushdown fn` は `fn` を決して呼びません。[関数種別](../concepts/kinds.md)
- **乱数の抽選**（random draw）。物語が `rng_choose` で引く値です。生成器のシードはセーブに含まれ、解析は抽選が取りうるすべての値を対象とします。[セーブ、リプレイと決定性](../concepts/saves.md)
- **ランタイム**（runtime）。ビルドしたゲームを実行するプログラムです。デスクトップランタイムはランタイムプロファイル `native_v0` を実装します。[ランタイム](../tools/runtime.md)
- **リアクティブ**（reactive）。UI の属性や要素が、読み取っているシグナルなどのリアクティブな値が変わるたびに再評価されることです。[ゲームシステム](../concepts/system.md)
- **リプレイ**（replay）。セーブをロードしたり巻き戻したりするために、記録されたトレースに沿って物語をもう一度実行することです。[セーブ、リプレイと決定性](../concepts/saves.md)
- **ルートページ**（root page）。Title、Gallery、Credits のような、実行中のゲームをもたない底のモードです。[ゲームシステム](../concepts/system.md)
- **レイヤー**（layer）。エンティティの画像、ラベル、動画の内容です。トランジションを通じてだけ変更されます。[演出](../concepts/presentation.md)
- **レンダー（レンダー関数）**（render, render function）。ステップの `render` 属性として渡す `const fn(Screen) -> Screen` です。ステップの前の画面を、ステップの後の画面に変えます。[演出](../concepts/presentation.md)
- **論理画面**（logical screen）。ステップのレンダーの後の、画面の永続的な状態です。エンティティとそのコンポーネント、Hud、カメラ、画面フィルター、オーディオチャンネルから成ります。アニメーションが論理画面を変えることはありません。[演出](../concepts/presentation.md)
