mie 用語集
本書は mie 言語仕様で頻出する基本語をまとめる。各語の詳細は参照先の節を見よ。本書中の §N 形式の参照は、特に断りがない限り language-spec.md の節を指す。
本書の収録基準: 語を載せるのは次の3条件を満たす基本語に限る。安易に追加しない。
- 頻出: 仕様全体で頻出する(特定セクション内で数回程度ならそのセクションで定義を明示すれば足りる)。
- 非一般: 言語使用者にとって一般的でない(既知である可能性が低い)。
- 非実装レベル: 言語使用者が知る必要のある語に限る(実装レベルの内部用語は載せない)。
| 用語 | 説明 |
|---|---|
| オブジェクト | mie の値の統一形。関数 / ブロック / データ / リスト / マップはすべてこの一種類のオブジェクトの異なる側面である (§2)。JavaScript の object literal などが指すマップ形より広い概念で、単に「オブジェクト」と書いた場合はこの実行時実体を指す。 |
| オブジェクトリテラル | オブジェクトを書く構文形の総称。ブレース形 { inner-name | slot-list | body } (§2.1) とブラケット形 [ inner-name | slot-list | body ] (§2.1.1) の 2 形があり、生成されるオブジェクトは同じ。差は省略形の意味と bare identifier の解釈のみ。 |
| ブロック | slot-list が空で body が非空のオブジェクト (例: {body})。制御構造に遅延評価として渡す用途が多い (§10)。 |
| データオブジェクト | body が空のオブジェクト。呼び出されても self を返す。「データ」として使う場合の慣用呼称 (§2.2)。 |
| unit | void / 無意味な戻り値を表す値。空タプル ()、型値は Unit。print / each / break! / else 無し when / 代入族の文 (§6.1) などが返す (§3.3)。 |
| 名前スロット | 名前で宣言される slot。name (必須・デフォルトなし・immutable)、name := expr (デフォルトあり・immutable)、name = expr (デフォルトあり・mutable) の 3 形がある。{} 内の bare identifier は常に名前スロット宣言。呼び出し時に未束縛の名前スロットが宣言順で引数を受ける唯一の binding 対象であり (デフォルトの有無を問わない。§3.5/§3.6)、アクセスは名前軸 (recv.name)。整数位置軸 (recv.0) には乗らない (§3.5)。 |
| 位置スロット | 名前を持たない slot。slot-list 中の bare identifier 以外の任意の式 (リテラル・演算式・(foo)・[foo] 等) が生む。値はリテラル評価時に eager に確定して immutable で、呼び出し時の binding 対象にはならない。整数添字 recv.0 / recv.[i] が頭から 0, 1, 2, … と番号付けする軸で、名前スロットは飛ばす。each / map / filter が舐めるのもこの軸 (§3.5 / §7.4)。 |
| 宣言順束縛 | 値を宣言した並び順で受け取り、名前を omit できない束縛文脈の総称。単独ローカル束縛の左辺 (_ := x)、位置 destructure (a, b := t)、slot パラメータ ({ a, b |}) の 3 つを指す。名前で選ぶ参照 (名前 destructure [a, b] / slot アクセス recv.name) や、整数添字の位置スロット軸とは別概念。破棄子 _ が非束縛ワイルドカードとして働くのはこの文脈に限られる (§6.1 / §3.5)。 |
| prelude | 起動時に root へ束縛される組込群。print / 型メソッド / 制御構造 / fork・sleep などを含み、import 不要で使える。 |
| 常在 (ambient) | import せずに使える性質。prelude がこれにあたる。対して標準ライブラリは @import "std:…" で明示取得する。 |
| reflect (反射) | prelude 常在の namespace object。reflect.names(obj) / reflect.has_name(obj, k) で、値が名前で解決できる全て (自身のスロット + 組込型メソッド + 演算子) を反射的に列挙する。obj.names (自身のスロットのみ) の反射的フルビュー版 (prelude.md §11)。prelude が常在束縛する初の namespace object。 |
| range (遅延シーケンス) | range(start, end) が返す、半開区間 [start, end) の整数列を遅延算出する値。要素を要求時に算出しリストを実体化しない。位置軸 universal method を実装しリストと互換に扱える (§7.6)。 |
| 中断点 | 協調スケジューラ上で、実行中の論理フローが中断し制御をスケジューラへ返す点。sleep / wait_any の呼び出しと、未解決 Future への ! がこれにあたる。中断点でのみ他フローへのフロー切り替えが起こりうる (中断は必ず起こり、切り替えは他に走れるフローがある時だけ起こる)。通常の関数呼び出し・now・解決済み Future への ! は中断点ではない (§10.1)。 |
| 型 (type) | 値(述語)として表される型。prelude 束縛で、注釈 名前: 型 に書く (§17)。 |
| 型語彙 (type vocabulary) | prelude が束縛する組込型名の固定セット(型値 Int 等 + 型コンストラクタ List 等)。ユーザ定義の @type / shape は含まない (prelude.md §12)。 |
| shape 型 | リテラル再利用で表す object/record/function 型({x: Int |} / {Int, Int | Int})。function は body 位置に結果型を置く (§17)。 |
| 型エイリアス (type alias) | @type Name := <型式> で定義する名前付き型。右辺を型コンテキストで評価した型値を Name に束縛する (§17.4)。 |
| 型コンストラクタ (type constructor) | 引数を取って型値を作る大文字始まりの型語彙。List(T) / Option(T) / OneOf(A, B) / Result(T, E)(E 既定 Error、Result(T) ≡ Result(T, Error))/ Future(T)。素の型値 (Int 等) と違い適用形 Ctor(T) を取る (§17.4 / prelude.md §12)。 |
| 型値 (type value) | 型を表す値。prelude が原始(Int 等)・型コンストラクタ(List 等)を束縛し、@type / shape リテラルで合成する (§17.4 / prelude.md §12)。 |
| パターン (pattern) | @match の arm の => 左に置く照合対象。型値・素の値・レコードパターン {slot-list}・値コンストラクタパターン Ctor(slots) のいずれか (prelude.md §8.4)。 |
| タグ付きデータ (tagged data) | タグ(値コンストラクタ)で区別される複数の形のいずれかを取る値。Option(Some(T) ∣ None)/ Result(Ok(T) ∣ Err(E))/ Ordering(Less ∣ Equal ∣ Greater)が prelude の例。@match の値コンストラクタパターンで判別+payload 束縛する (§9.2 / §16 / prelude.md §13)。 |
| 値コンストラクタ (value constructor) | タグ付きデータの各タグに対応する大文字始まりの名前。payload を取るタグ (arity ≥1) は関数値 Some / Ok / Err(Ok(v) で構築)、payload 無しのタグ (arity 0) は呼び出し不要でそのまま値 None / Less / Equal / Greater(ユーザ定義タグ含む)。match の値コンストラクタパターン [Ok(v) | …] / [None | …] で判別+payload 束縛する (prelude.md §8.4)。 |
| payload (ペイロード) | 値コンストラクタが包む中身の値。タグ付きデータが slot に保持する(Some(x) の x、Ok(v) の v、Err(e) の e)。arity 0 のタグ (None / Less 等) は持たない。構築時の引数とは段階が異なり、@match の値コンストラクタパターン Some(x) => … で取り出す (prelude.md §8.4)。 |