togetter ”言語内 DSL を考える” を 読んだ

http://togetter.com/li/62167

を読んだ. DSLs 3.7, 6 を連想させる内容だった。

マクロを例にして話が進む。ちょっと想像が出来なかった。

個人的には、内部の構造がちらついても良いんだが
DSLの記述層の何処に間違いがあるかが分かってほしいのは確か。

Internal DSLの Expression Builderを使っている分には、静的言語であればIDEの補完で間違いを減らせるし
ブロックベースのRubyDSLを組んでも、DSL層の記述部分の間違いが、スタックトレースの上位に間違いが表示されると思うので、それほど気にならない気がする。
ただ、これは、Ruby言語を使っているプログラマーDSLのメカニズムをちょっと知ってみたいと思うプログラマー目線。


DSL記述層と内部メカニズムの境界をガチにはっきりさせたいなら、External DSLを選択した方がよいのだろう。


Internal DSL/External DSLを選択する理由は、6章読を


External DSLに比べて、Internal DSLの方が、相対的にDSLの仕組みの構築の学習コストや実際につくり込みコスト、
プログラミング設計などしないプログラマには、自分で使い慣れた言語で記述できて親しみやすい、などなど。
(External DSLの実現方法の選択は色々あるが、XMLを使って自分でパーサをつくり込まない方法の他に、Parser Generatorとか Tree Constructionとか プログラミング言語をつくるのと似た仕組みも範囲内。)

External DSLの魅力は、DSL記述のノイズをInternal DSLよりも取り除け、
より Domain Expertとのコミュニケーションに注力できる かつ 実行可能な言語が設計できる、
DSL記述層と内部のメカニズムの境界をもっと明確にできる などなどか


Domain-Specific Languages (Addison-Wesley Signature Series (Fowler))

Domain-Specific Languages (Addison-Wesley Signature Series (Fowler))