「専用言語か」と「全域か」は独立した二軸である
設定記述言語の系譜は「汎用言語に埋め込むか、専用言語を作るか」の一本の線ではない。「専用言語かどうか」と「全域的かどうか」は独立した選択であり、その二軸が張る空間として見た方が正確である。
Carinaの選択は孤立したものではない。TerraformのHCL、BazelのStarlark、Dhall、CUEはいずれも「全域的な設定記述言語」の系譜にあり、評価の停止を言語で保証した上で、評価結果に対する検査や合成を組み立てている。逆にNixはチューリング完全であり、この系譜には入らない(Nixの評価は停止しないことがある)。
ここにPklを加えると、系譜が二軸の空間として見えてくる。Pklは専用の設定記述言語でありながらチューリング完全で、Nixと同じ象限にいる。
| 全域的 | チューリング完全 | |
|---|---|---|
| 専用言語 | HCL / Starlark / Dhall / CUE / Carina | Nix / Pkl |
| 汎用言語埋め込み | (構造的に不可能) | Pulumi / CDK |
四象限のうち一つだけが空である。「埋め込み + 全域」の象限が空なのは偶然ではない — ホスト言語をサブセット化しない限り埋まらず、サブセット化はもう別言語を作ることと同じだからである。
この二軸で見ると、専用言語であることは全域性を意味しないし(Pkl / Nix)、全域性を欲しがることが専用言語を選ぶ十分な理由になるわけでもない。二つの軸を混同すると「DSLだから安全」「汎用言語だから危険」という粗い対比に落ちてしまう。分けて見れば、Carinaの立ち位置は「専用言語のうち、さらに全域を選んだ側」という二重の選択として記述できる。