「汎用言語 × 言語が決める」の空席は偶然ではない
「汎用言語 × 言語が決める」象限に該当するIaCツールは、確認できる範囲で存在しない。これは偶然ではなく、ホスト言語をサブセット化しない限り埋まらないという構造から来る。
同じ空席は全域性の軸でも現れる。「専用言語かどうか」と「全域的かどうか」は独立の選択のはずだが、埋め込み×全域の象限は空である。
| 全域的 | チューリング完全 | |
|---|---|---|
| 専用言語 | HCL / Starlark / Dhall / CUE / Carina | Nix / Pkl |
| 汎用言語埋め込み | (構造的に不可能) | Pulumi / CDK |
汎用言語に埋め込んだまま言語レベルの制約を課すには、ホスト言語をサブセット化するしかなく、それはもう別言語を作ることと同じである。
この象限に近く見えるものはいくつかあるが、いずれも該当しない。SDKが型を提供するパターン(PulumiのOutput<T>、CDKのBucketProps)は、ホスト言語の型システムをSDK側で活用しているだけで、静的型言語かつユーザーが型を書く慣習を採用したときにのみ効く。Pkl(Apple)は汎用言語風だが評価モデルを制限するDSLで近いものの、PklはIaCツールではなく構成データ出力DSLである。
実装するとすれば「汎用言語の中にDSLを入れる」アプローチ(F#のcomputation expression、Scalaのimplicit + macro等)が該当しうるが、IaC領域での全面実装例は確認できていない。理論的な設計余地としては開いているが、汎用言語のホスト機構と整合させるコストが高いと推測される。