notes mizzy.org

「専用言語か」と「全域か」は独立した二軸である

解釈 出典: explorations/2026-06-10-carina-type-system-type-theory/totality-comparison.md §6 作成

設定記述言語の系譜は「汎用言語に埋め込むか、専用言語を作るか」の一本の線ではない。「専用言語かどうか」と「全域的かどうか」は独立した選択であり、その二軸が張る空間として見た方が正確である。

Carinaの選択は孤立したものではない。TerraformのHCL、BazelのStarlark、Dhall、CUEはいずれも「全域的な設定記述言語」の系譜にあり、評価の停止を言語で保証した上で、評価結果に対する検査や合成を組み立てている。逆にNixはチューリング完全であり、この系譜には入らない(Nixの評価は停止しないことがある)。

ここにPklを加えると、系譜が二軸の空間として見えてくる。Pklは専用の設定記述言語でありながらチューリング完全で、Nixと同じ象限にいる。

全域的 チューリング完全 専用言語 HCL / Starlark / Dhall CUE / Carina 停止を言語で保証する系譜 Nix / Pkl 専用言語でも 全域とは限らない 汎用言語埋め込み (構造的に不可能) ホスト言語をサブセット化 しない限り埋まらない Pulumi / CDK ホスト言語の任意実行
四象限のうち「埋め込み + 全域」だけが空である。空席は偶然ではなく、ホスト言語をサブセット化しない限り埋まらないという構造から来る。
全域的チューリング完全
専用言語HCL / Starlark / Dhall / CUE / CarinaNix / Pkl
汎用言語埋め込み(構造的に不可能)Pulumi / CDK

四象限のうち一つだけが空である。「埋め込み + 全域」の象限が空なのは偶然ではない — ホスト言語をサブセット化しない限り埋まらず、サブセット化はもう別言語を作ることと同じだからである。

この二軸で見ると、専用言語であることは全域性を意味しないし(Pkl / Nix)、全域性を欲しがることが専用言語を選ぶ十分な理由になるわけでもない。二つの軸を混同すると「DSLだから安全」「汎用言語だから危険」という粗い対比に落ちてしまう。分けて見れば、Carinaの立ち位置は「専用言語のうち、さらに全域を選んだ側」という二重の選択として記述できる。

#dsl #系譜 #設計空間