本文へ移動
Hikari 仕様

用語集

本書は Hikari 言語仕様で頻出する基本語をまとめる。各語の詳細は参照先の節を見よ。本書中の §N 形式の参照は、特に断りがない限り language-spec.md の節を指す。

本書の収録基準: 語を載せるのは次の3条件を満たす基本語に限る。安易に追加しない。

  • 頻出: 仕様全体で頻出する(特定セクション内で数回程度ならそのセクションで定義を明示すれば足りる)。
  • 非一般: 言語使用者にとって一般的でない(既知である可能性が低い)。
  • 非実装レベル: 言語使用者が知る必要のある語に限る(実装レベルの内部用語は載せない)。
用語 説明
オブジェクト Hikari の値の統一形。関数 / ブロック / データ / リスト / マップはすべてこの一種類のオブジェクトの異なる側面である (§2)。キーと値の対を並べたマップ形より広い概念で、単に「オブジェクト」と書いた場合はこの実行時実体を指す。
オブジェクトリテラル オブジェクトを書く構文形 { slot-list | body } (§2.1)。0-pipe の { body } と空の {} が省略形である (§2.1.1)。inner-name は inner name としてスロットに書く (§4.2)。
名前リスト (name-list) {…} で囲んだ名前の列。スロット destructure の左辺・import の対象・export の列挙に現れる (§6.3§13.2)。オブジェクトリテラルでも slot-list でもない独立した構文カテゴリで、match のレコードパターン (prelude.md §8.4) の束縛のみの部分集合にあたる。中身は bare 識別子か name: 型 で、bare 識別子は束縛・公開する名前を表す。式が来られる位置 (代入の左辺) にも現れるため、判別は閉じ括弧の次が := / = であるかを見る lookahead が担う。
ブロック slot-list が空で body が非空のオブジェクト (例: {body})。制御構造に遅延評価として渡す用途が多い (§10)。
データオブジェクト body を省略したオブジェクトの慣用呼称 (§2.2)。値の種別ではない — 省略した body は「その literal の inner_bound を返す本体」で、呼び出すと束縛を写した値が返る。
unit void / 無意味な戻り値を表す値。空タプル ()、型値は Unitprint / each / break! / else 無し when / 代入族の文 (§6.1) などが返す (§3.3)。
スロット オブジェクトが名前で宣言し名前で引く場所。name (必須・デフォルトなし・immutable)、name := expr (デフォルトあり・immutable)、mutable name := expr (デフォルトあり・mutable) の 3 形がある。{} 内の bare identifier は常にスロット宣言。呼び出し時に未束縛のスロットが宣言順で引数を受ける (デフォルトの有無を問わない。§3.5/§3.6)。アクセスは recv.name。オブジェクトは整数添字の並びを持たないので recv.0 は引けない (§2.1)。集合はリテラル宣言時に固定される (§2.4)。
Sequence 整数添字で引ける要素の並びを持つことを表す構造的 interface (§17.5)。length / is_empty / each / map / filter / fold / first / last / positions / has_position / to_list と添字 recv.N / recv.[i] からなる。List・String・Bytes・range が実装する。タプルは length と添字だけを持つので { length |} には一致するが Sequence の全体には一致しない。オブジェクトは実装しない — スロットの列挙は names / values / has_name (§2.5) が担う。
宣言順束縛 値を宣言した並び順で受け取り、名前を omit できない束縛文脈の総称。単独ローカル束縛の左辺 (_ := x)、タプル destructure (a, b := t)、slot パラメーター ({ a, b |}) の 3 つを指す。名前で選ぶ参照 (スロット destructure { a, b } / slot アクセス recv.name) とは別概念。左辺が値を受け取る並びを指す語であり、右辺のどこから取るかとは独立である — タプル destructure が右辺から読むのは Sequence の要素 (§6.3 / §7.4) だが、それは取り出す側の話にすぎない。破棄子 _ が非束縛ワイルドカードとして働くのはこの文脈に限られる (§6.1 / §3.5)。
prelude 起動時に root へ束縛される組込群。print / 型メソッド / 制御構造 / forksleep などを含み、import 不要で使える。
常在 (ambient) import せずに使える性質。prelude がこれにあたる。対して標準ライブラリは import x := "std:…" で明示取得する。
range (遅延シーケンス) range(start, end) が返す、半開区間 [start, end) の整数列を遅延算出する値。要素を要求時に算出しリストを実体化しない。Sequence を実装しリストと互換に扱える (§7.6)。
中断点 協調スケジューラー上で、実行中の論理フローが中断し制御をスケジューラーへ返す点。sleep / wait_any の呼び出しと、未解決 Future への ! がこれにあたる。中断点でのみ他フローへのフロー切り替えが起こりうる (中断は必ず起こり、切り替えは他に走れるフローがある時だけ起こる)。通常の関数呼び出し・now・解決済み Future への ! は中断点ではない (§10.1)。
型 (type) 値(述語)として表される型。prelude 束縛で、注釈 名前: 型 に書く (§17)。
型語彙 (type vocabulary) prelude が束縛する組込型名の固定セット(型値 Int 等 + 型コンストラクター List 等)。ユーザー定義の type / shape は含まない (prelude.md §11)。
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 既定 ErrorResult(T)Result(T, Error))/ Future(T)。素の型値 (Int 等) と違い適用形 Ctor(T) を取る (§17.4 / prelude.md §11)。
型値 (type value) 型を表す値。prelude が原始(Int 等)・型コンストラクター(List 等)を束縛し、type / shape リテラルで合成する (§17.4 / prelude.md §11)。
パターン (pattern) match のアームの => 左に置く照合対象。型値・素の値・タプルパターン (p₁, …, pₙ)・レコードパターン { field… }・値コンストラクターパターン Ctor(pat…) のいずれか (prelude.md §8.4)。
タグ付きデータ (tagged data) タグ(値コンストラクター)で区別される複数の形のいずれかを取る値。OptionSome(T)None)/ ResultOk(T)Err(E))/ OrderingLessEqualGreater)が prelude の例。match の値コンストラクターパターンで判別+payload 束縛する (§9.2 / §16 / prelude.md §12)。
値コンストラクター (value constructor) タグ付きデータの各タグに対応する大文字始まりの名前。payload を取るタグ (arity ≥1) は関数値 Some / Ok / ErrOk(v) で構築)、payload 無しのタグ (arity 0) は呼び出し不要でそのまま値 None / Less / Equal / Greater(ユーザー定義タグ含む)。match の値コンストラクターパターン Ok(v) => … / None => … で判別+payload 束縛する (prelude.md §8.4)。
payload (ペイロード) 値コンストラクターが包む中身の値。タグ付きデータが slot に保持する(Some(x)xOk(v)vErr(e)e)。arity 0 のタグ (None / Less 等) は持たない。構築時の引数とは段階が異なり、match の値コンストラクターパターン Some(x) => … で取り出す (prelude.md §8.4)。