DSLを作るは必要か?というような話。を、飲みながらした、ついでにその時言ったことをまとめておく。特に結論とかは無い。
個人的にはDSLはもう必要無いと思う。
プログラミングの実装において、1回目の実装のコストなんて全体から見ればほんのちょびっとで、「10分の1の時間で実装できました」とか「コード量が半分になりました」とかのメリットは、
- ちゃんとしたコンパイラがある(例:ShiftJISの日本語が通るコンパイラがある)
- ちゃんとしたデバッガ、プロファイラがある
- 使える人がたくさんいる
とかのメリットと比べると、どうでもよい問題ではないかと思う。
YACCみたいなパーサジェネレータなんかが良い例で、C言語とかにありがちなコンテキストセンシティビティをデバッグしはじめた瞬間にYACC使うんじゃなかったと後悔するとかそういう。
まあ、それでもメリットがある場面もあるかもしれない。とりあえず思い付いたのとしては、
なんらかのモデルがあって検証する必要があるとき
SPINとかVDMとか。
テストは、仕様を網羅的に検証できるわけではない。人命がかかってるとかの状況によっては、網羅的な検証がしたいときもあるかもしれない。
フルスペックのプログラミング言語で書かれたプログラムは、検証するのは大変だろう。なので、言語仕様を小さくして、検証可能にするのはメリットがある。
バックエンドがフルスペックではない
シェーダとか。
プログラムを実行する機器が、フルスペックのプログラミング言語を動かすほど機能が無い場合、言語仕様を小さくする必要がある。
すごく最適化できる
具体例思い付かず…
Cのオプティマイザは、関数スコープ以上の最適化はあまり頑張らないけど、DSLならもっとスコープ広くできる可能性があるので、Cより最適化できる。
あたり?