notes mizzy.org

「外部DSL × 規約に委ねる」が空席なのは淘汰圧の結果である

解釈 出典: explorations/2026-04-26-cdk-pulumi-terraform-carina-comparison/chapter-1-notation-and-abstraction.md §1-3-4, explorations/2026-04-26-cross-dsl-design-position/README.md問い2 作成/ 更新

記述言語と記述自由度の所在の2×2で、「外部DSL × 規約に委ねる」— 動的なsourceと任意関数を持つ専用DSL — に該当するツールがない。これは偶然の空白ではなく淘汰圧の結果である。

言語が決める 規約に委ねる 外部DSL 汎用言語 Terraform / Carina / Bicep 専用文法で望ましくない 書き方を禁じる 空席 経済的に成立しないから 空いている 空席 技術的コストが高いから 空いている CDK / Pulumi 何でも書けて、lintと レビューで縛る 二つの空席は同じ「空」でも性質が違う。前者には設計余地が残らない。
2×2の対角に埋まった席が並び、残る二席が空いている。ただし空いている理由は異なる — 右上は経済的に成立しないため、左下は技術的コストが高いためである。

論理はこうなる。専用文法を作っておきながら任意の動的選択を許すなら、汎用言語を使う方が経済的である。外部DSLを作るコスト(parser、evaluator、LSP、エコシステムの不在)を払う見返りが「文法レベルで望ましくない書き方を禁止できる」ことなのだから、それを放棄した外部DSLには存在理由が残らない。だから作られても生き残らない。

構成記述系DSL 11個への検証はこの仮説を補強する。この象限はほぼ空で、Nickelが部分的に近い(3自由度のうち2つが規約寄り)だけである。そのNickelも実装切替(import path)は依然として言語が決める。「外部DSLを作っておきながら3自由度すべてを規約に委ねる」DSLは、11個の中には存在しない。

この空席は、隣の空席(「汎用言語 × 言語が決める」)とは性質が違う点に注意が要る。こちらは経済的に成立しないから空いているのに対し、あちらは技術的コストが高いから空いていると説明される。前者は設計余地が残っているという話にはならない。

#設計空間 #dsl #淘汰圧