日本語 · English(未訳)

ADR-46: 外部供給宣言 external——実行時に解決されるテーブルリテラル(socket の確定)

判断: 外部供給宣言(socket)を言語に採用し、次のとおり確定する(発報層実装からの第一次 還流〈生成方式の実測痛点 2 件=静的ソース不可・統治の焼き忘れ〉を受けた要否込みの裁定。候補設計 draft §1.27=3 視点検証済み・設計者裁定 2026-07-14〈採用・宣言語 external 確定〉を経た ADR 化。 ADR-26 が先送りした「式に埋める/器で受ける」の使い分けの確定であり、ADR-36 帰結〈器は整列の 主張を含む〉・ADR-37 帰結〈器は被覆主張を含む〉の受け皿)。

  1. 設計の核=「実行時に解決されるテーブルリテラル」。新しい型・新しい代数は導入しない。 external 束縛の解決値はテーブル値そのもの(点列・covering・asof・labels?)であり、テーブル リテラルが字面で運ぶ静的性質だけを、字面が無い代わりに宣言で先取りする。解決値には リテラルと同一の統治検査が供給契約として課される。観測面(範囲外註釈・被覆サマリ・残走路・ 整列検査・正体判定)は既存の器のまま——新設ゼロ。

  2. 形と位置: 名 = external(kind: dates | instants [, labels: [値域]] [, source: "…"])premise 束縛の右辺(先頭)限定——本体層・前文下の top-level 束縛・ラムダ内・引数位置・ 引数つき束縛は静的エラー(誘導つき。source:/tz: の統治が premise に要る——文法で縛らず意味層 検査に置く=ADR-45 判断 5 と同型)。パイプ合成は可(external(…) |> snapTo(day))で、出自の 焼印は external 評価点で束縛名を焼く。external は予約語(core 語再定義エラーの面)。 EBNF の変更は無し(頭位置 name(args) は stream-atom で導出済み・named-arg のキーは param-key に kind を追加・kind 値 dates/instants は列挙ラベルと同じ位置依存のキーワード 解釈=ADR-42 の統一原理)。

  3. kind: =整列の主張(静的・宣言が字面の代役): dates=定義側 tz の市民日グリッド整列/ instants=整列なし(ADR-36 判断 2 のテーブル規則の二分類に正確に対応)。整列は宣言から 静的に決まり、解決値の行数・中身に依存しない——空でも宣言どおり。ADR-45 の空虚適合は 字面規則の帰結であり external には適用しない(宣言があるのに使わないのは主張の放棄)。 帰結として、ADR-45 が原理的限界として引き受けた「0 行→1 行で整列が変わる」非連続を external は宣言で解消する。契約検査は字面でなく幾何(dates=定義側 tz の各市民日の最初の瞬間 ——wire が日付字面のため錨打ちの構成で保証される)。

  4. labels: =値域の列挙宣言: ラベル語彙は静的知識(裸名の比較の名前解決・ADR-42 判断 7 の 域外検査)のため、有無フラグでなく値域を列挙する。解決値のラベルは値域内・時点列と同長。 無宣言の external にラベルが到着したら契約違反(ADR-39「黙って捨てない」の統治)。

  5. 統治の随伴——「要求は器・内容はデータ」: source: は必須(premise メンバー・束縛ごとの named-arg 上書き可)。covering と asof は解決値が必ず運ぶ(欠落=契約違反——asof 焼き忘れ 〈還流痛点 (2)〉を契約で消すには asof も必須。ADR-37 帰結の精密化=器が含むのは被覆の要求・ 主張の内容はデータが運ぶ)。解決値 asof の効力は当該束縛の出自属性(註釈・被覆サマリ)に 限り、premise の静的 asof:(版ピン)と食い違うときは被覆サマリに常時表示(黙って上書き しない)。external を持つ premise は tz: 宣言必須(ADR-37 判断 1 の延長——covering 端と dates の錨は定義側 tz で解決=ADR-35 判断 8)。束縛後置の covering:(ADR-37 判断 5)は従来 どおり付けられる(必要条件検査は解決時に走る)。

  6. 解決の意味論(純粋性 I7 との整理): 解決は評価文脈の随伴であり評価中の副作用ではない (先例=asof: latest・tzdb の版供給〈ADR-33 判断 3〉)。要求駆動=評価内の初回参照時に 一回解決(ADR-33 判断 8 の tz と同型・未参照の external は解決されない)。スナップショットの 単位は〔定義側 premise・束縛名・上書き後の source:〕——with 派生・多文脈・修飾参照は同一 スナップショットを見る(解決子に渡すのも定義側 premise 名)。錨打ち・covering 端の解決は評価 文脈ごと(リテラルの再錨と同型)。スナップショット識別(解決値 asof)はメモ化の文脈キーに 参加する(ADR-35 帰結の延長——常駐評価器での版差の誤共有の封じ。run ごと生成の参照実装は 構成で適合)。評価はスナップショット相対で純粋・決定的——spec §7.8 の決定性は「同一 スナップショット相対」の条件つきに改稿する。解決の手段は言語が規定しない(ADR-15—— 言語は器〈宣言・契約検査・エラー分類〉まで)。

  7. エラー分類: (a) 解決失敗=評価エラーの機械可読な部分類(供給エラー)——実装系は本 部分類を boot 検査から除外して劣化運転に落としてよい(還流 §3-1 の実測「インフラ失敗を boot throw に含めるとプラットフォーム全体を巻き込む」に適合するための識別の器。言語が規定するのは 「黙って空にしない」まで)。(b) 契約違反(covering/asof 欠落・kind 不一致・乱順/重複・包含・ labels 同長/域外/無宣言到着・日付の実在〈ADR-43 の字句検査の解決値向け再執行〉・数値の 有限性)=評価エラー(ソース/契約の不正=boot 検査対象。リテラルと同一の文言体系・根拠は ADR-33 判断 9〈データ相対エラーの並置は拡張〉)。(c) 空データ(0 行+covering)=正当な値 (ADR-45——「まだ無い」と「解決失敗」が型で区別される)。

  8. wire 形式は kind ごと: dates=市民日付の字面("YYYY-MM-DD")——言語側が錨打ちする (派生の tz: 上書きで再錨可能・DST 隙間日の day 開始も言語側に一元化)。instants=epoch ms (壁時計字面は DST 重複で二意になり得るため)。covering は covering-list の字面(端の含意・ 年略記・開端・区間リストの意味論をリテラルと完全共有)。

背景: 第一段(発報層)はソース生成方式で回ったが、(1) ソースが静的でいられない(日次再実体化 ごとに再生成=プロバイダ形・ソース差分検査・毎回再パースの回り道)、(2) 統治の焼き忘れ(asof を 生成器が焼くまで観測面が欠けた)の 2 痛点が実測で確定した。external の採る価値は検証で較正済み—— 統治の検査が言語に移る(評価器は従来から昇順・包含・同長を検査済みで、新規は covering 必須化・ asof 必須随伴・整列主張の宣言・ラベル値域の静的化の 4 点)のであって、写経そのものが消えるのでは ない(覆域の算出・昇順化・asof の正しさ・版規律は解決子に残る)。対価は「実行時解決」の概念 (評価文脈の随伴に整理でき純粋性は保てる)と、監査・再現の担い手の移動(生成方式では生成 ソースが完全な証跡・external ではスナップショット保存が実装系の責務)。

却下した案:

帰結: