本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはcpanクライアントApp::cpmの開発などで知られる鍛治匠一さんで、
DSLとは
DSL
- リレーショナルデータベースへの問い合わせに特化したSQL
- ビルド手順記述に特化したMakefile
- cpanモジュール依存記述に特化したcpanfile
などがDSLです。
DSLの利点
ではDSLの利点は何でしょうか。次の点が挙げられると思います。
- 簡潔である
- 適切なDSLを用いれば、
問題を簡潔に記述できます。その結果わかりやすくなり、 その問題の重要な部分に集中できます。 - クールである
- 簡潔さとも関連しますが、
適切なDSLは無駄なものが削ぎ落とされており、 かっこ良くクールなものになります。DSLを人間が読み、 開発するものである場合、 クールさは非常に重要であると考えます。
DSLの欠点
DSLも、
- 問題領域を定義するのが難しい
- DSLは特定の問題領域に特化した言語であると述べましたが、
問題領域を定義することは非常に難しい作業です。問題領域の定義に失敗すると、 DSLの範疇 (はんちゅう) で扱えなくなる、 DSLが冗長になるなどの問題が起こり、 DSLの利点が失われてしまいます。 - 新たな言語を作るコストがかかる
- 新たな言語を作る以上、
文法を考えそれを解釈するプログラムを作らなければならず、 相当なコストがかかります。 - 新たな言語を習得するコストがかかる
- 使用者はその新たな言語を習得しなければなりません。さらにDSLという特性上、
そこでの知識がほかに応用しにくいという問題も持っています。
これらの利点、
内部DSLと外部DSL
さて、
内部DSL
内部DSLもしくは言語内DSLとは、
- cpanfileはPerlをホスト言語として定義された内部DSL
- RakefileはRubyをホスト言語として定義された内部DSL
などです。
内部DSLの利点としては次の3点が挙げられます。
1つ目は、
2つ目は、
3つ目は、
外部DSL
内部DSLに対して、
- SQL
- Makefile
などが外部DSLです。
外部DSLの利点として、
欠点としては、
以降では、
<続きの