ドメイン特化言語
2008年5月15日
ドメイン特化言語 (DSL) の基本的な概念は、あらゆる種類のソフトウェア問題を対象とした汎用言語ではなく、特定の種類の問題を対象としたコンピューター言語です。ドメイン特化言語は、コンピューティングが行われてきたときから議論されており、使用されてきました。
DSLはコンピューティングでは非常に一般的です。例としては、CSS、正規表現、make、rake、ant、SQL、HQL、Railsの多くのビット、JMockの期待、graphvizのdot言語、FIT、strutの構成ファイルなどがあります。
私が重要かつ有用としている区別は、内部DSLと外部DSLです。内部DSLは、ホスト言語を使用してホスト言語に特定の言語の感覚を与える特定の方法です。このアプローチは近年、Rubyコミュニティで普及していますが、他の言語(特にLisp)では長い歴史があります。このようなローセレモニの言語では通常は簡単ですが、JavaやC#などより主流の言語で効果的な内部DSLを作成できます。内部DSLは、埋め込みDSLまたはFluentInterfacesとも呼ばれます。
外部DSLには独自の構文があり、それらを処理するための完全なパーサーを作成します。Unixコミュニティでは、これを行うという非常に強力な伝統があります。多くのXML構成は外部DSLとして利用されていますが、XMLの構文はこの目的に適していません。
現在最も一般的なDSLはテキスト形式ですが、グラフィカルDSLを使用することもできます。グラフィカルDSLには言語ワークベンチに沿ったツールが必要です。言語ワークベンチはあまり一般的ではありませんが、プログラミングの方法を大幅に向上させる可能性があると考えている人も多くいます。
DSLはいずれかを実行またはコード生成によって実装できます。解釈(DSLスクリプトを読み取り、実行時に実行する)は通常最も簡単ですが、コード生成は必須の場合があります。通常、生成されるコード自体がJavaやCなどのハイレベル言語です。
2010 年後半に DSL に関する 書籍を出版 しました。私は DSL に関する私の成果を集めた ガイドページ を持っています。