用語集
このページでは、Sobakasu の言語リファレンスでよく使う用語を説明します。各ページでも、そのページを読むために必要な用語はできるだけその場で説明します。
名前や型、関数などを新しく定義する記述です。function、struct、enum、const などが宣言に当たります。
評価すると値になる記述です。数値リテラル、関数呼び出し、演算、if、match などが式に当たります。
処理の一単位として実行される記述です。let によるローカル変数の宣言、return、break などが文に当たります。
名前を参照できる範囲です。たとえば関数内で宣言したローカル変数は、その変数が有効なスコープの中だけで参照できます。
モジュールや型などを含めて、参照する名前をより具体的に示した名前です。Sobakasu の通常の修飾名では :: を区切りに使います。
std::math::MathfResult::Ok値が持つフィールドやメソッドへアクセスする value.member の . とは役割が異なります。
複数の値を順番付きで一組にした値です。各要素は名前ではなく位置で区別します。
let pair = (42, "hello");let number = pair.0;列挙型とバリアント
Section titled “列挙型とバリアント”列挙型は、取り得る形をあらかじめ列挙して定義する型です。enum で宣言します。
列挙型に並べたそれぞれの要素をバリアントと呼びます。バリアントは値を持たない形だけでなく、追加の値を持つ形にもできます。
enum Result<T> { Pending, Ok(T), Error { message: string },}この例では Pending、Ok、Error がバリアントです。
値の形を調べたり、値を分解して名前へ受け取ったりするための書き方です。let によるタプルの分解や match の分岐で使います。
state ブロックで宣言する変数です。イベント処理が終わった後も値を保持し、次のイベント処理から同じ値を利用できます。
behavior ブロック
Section titled “behavior ブロック”VRChat から届くイベントやネットワークイベントを処理する部分をまとめる宣言です。ユーザー定義型にメソッドを追加する implementation とは役割が異なります。
状態へのアクセス権
Section titled “状態へのアクセス権”behavior のイベント処理や関数から状態変数を使う場合、引数一覧の先頭に state と書きます。この state は通常の値を受け取る引数ではなく、その処理が状態変数を読み書きする権限を明示するものです。イベント処理では状態変数を使わない限り省略できます。interact にも特別な必須規則はありません。
on interact(state) { state.count += 1;}状態変数を使わないイベントは on interact { ... } のように書けます。state を省略したイベント処理や関数から state.count を参照すると、コンパイルエラーになります。
状態に依存する behavior function やネットワーク受信処理は、state.name(...) または behavior::name(state, ...) と書いて呼び出します。この場合の state も状態へのアクセス権を示し、通常の引数には含まれません。
論理演算の結果が途中で確定した場合に、残りの式を評価しない動作です。
a && b では a が false なら b は評価されません。a || b では a が true なら b は評価されません。
ジェネリクス
Section titled “ジェネリクス”型を一つに固定せず、型をパラメーターとして受け取れるようにする仕組みです。
struct Box<T> { value: T,}Box<i32> のように具体的な型を指定して使います。
ジェネリックな型や関数について、実際に使用された型ごとの具体的な版をコンパイル時に作る方法です。英語では monomorphization と呼ばれます。
Prelude
Section titled “Prelude”明示的な use を書かなくても最初から利用できる、基本的な型や関数などの集まりです。
外部 API
Section titled “外部 API”Unity、VRChat、CLR など Sobakasu の外側で提供される型や関数です。Sobakasu から利用するときは主に extern を通して対応付けます。
Application Binary Interface の略です。Sobakasu と Udon の間で、値や関数呼び出しをどのような実行時形式で受け渡すかを表す規約です。通常の Sobakasu コードを書くときに ABI の詳細を意識する必要はありませんが、extern や Udon との連携では制約として現れることがあります。