全域性の価値は「何をゲートするか」で決まる
全域性は、それ自体が普遍的に望ましい性質なのではない。静的段階が何の門番をしているかによって、その価値が変わる。同じ「評価が止まらないかもしれない」欠陥でも、ビルドが失敗するだけの言語と、実インフラを変更する段階の手前に立つ言語とでは重さが違う。
この点を照らすのがPkl(Apple)の位置である。Pklは専用の設定記述言語で、型注釈に任意の述語を付けられる(port: Int(this > 0 && this < 65536))。検査はその述語を評価済みの値へ適用する方式で、意味論的型付け + 値ベースの契約検査という検査様式だけ見れば、設定記述言語の系譜の中でCarinaに最も近い。
ところが停止性の軸では反対側にいる。Pklは再帰関数を書けるチューリング完全な言語で、評価は停止しないことがあり得る。CLIに評価タイムアウトのオプションがあるのはその裏返しである。純粋性はモジュール・外部リソースへのアクセス許可制というサンドボックスで運用的に確保するが、全域性は言語の定理としては持たない。
なぜPklは全域性を捨てて値ベースの篩検査だけを取れたのか。評価結果が何をゲートするかが違うからだと読める。Pklの評価結果はJSON/YAMLという成果物で、評価が止まらなければビルドが失敗するだけ — 世界は何も変わらない。一方CarinaやTerraformの静的段階は、実インフラを変更する動的段階の門番であり、門番が停止しないことは成果物生成の失敗より重い。
同じことは未知値の問題にも及ぶ。Pklには守るべきapply段階がなく、したがって段階を跨ぐ値(applyまで決まらない値)の問題自体を持たない。値ベースの検査様式は共有できても、二段階言語であることに由来する要請までは共有していない。
根拠の確度
Pklがチューリング完全であること・評価タイムアウトのオプションがあることはAIの学習データ由来で、一次ソース未確認。方向は確からしいが引用前に公式ドキュメントでの確認を推奨する。