# ドメイン固有言語

# 概要

ドメイン固有言語(ドメインこゆうげんご)またはドメイン特化言語(ドメインとっかげんご、英語: domain-specific language、DSL)は、特定のタスク向けに設計されたコンピュータ言語である。

DSL は一種類のタスクをうまく記述することに集中したプログラミング言語であり、古くから存在した。
何らかのプログラミング言語それ自体の構文と処理系を利用する internal DSL(あるいは embedded DSL)と、独立した構文と処理系を持つ external DSL に大別されるが、そのいずれにしても近年の、自由度と機能が高いプログラミング言語により手軽に扱えるようになったことから広まっている。
ドメイン固有モデリングの支持者によれば、ドメイン固有モデリングの発達と共にDSLという用語も広く知られるようになってきた、とされる。
実際にはドメイン固有言語はモデリングとは特別な関係が何もあるわけでもなく(ドメイン固有モデリングのためのドメイン固有言語、といったものはあるが)、モデリング以外にもあらゆる分野のための言語がある。

# 利点と欠点

DSLには次のような利点がある。

  • DSL は問題領域に適した抽象レベルと慣用句でソリューションを表現する。そのため、その領域の専門家が DSL で書かれたプログラムを理解でき、検証でき、修正でき、さらには開発できる。ただし、実際にそうなっている実例は少ない。
  • コード自体がドキュメントの役割を果たす。
  • DSL は、品質/生産性/信頼性/保守性/移植性/再利用性を高める。
  • DSL はその領域のレベルで検証可能である。言語構成要素が安全である限り、それを使って書かれたプログラムは安全とみなせる。

一方で、以下のような欠点もある。

  • DSLを習得するのにコストがかかるのに対して、その応用範囲が相対的に狭い。
  • DSL自体を設計/実装/保守するのにもコストがかかり、そのための開発環境が必要である。
  • 正しい適用範囲を探し、設定し、維持することが難しい。
  • ドメイン固有な部分と汎用プログラミング言語の構文とのバランス調整が難しい。
  • ハンドコーディングされたソフトウェアに比較して性能的に不利な可能性がある(実装しているアルゴリズムの効率の問題や、マルチコアCPU対応などのハードウェア活用度などに起因する)。
  • 似たようなDSLが増殖する(同業各社がそれぞれDSLを開発する場合など)。
  • 技術系でない(DSLの対象領域の)専門家は、DSLで書かれたプログラムであっても自らコードを書いたり修正したりできないことがある。
  • ITシステムにDSLを組み込むことは、汎用言語に比べて困難である。
  • 1つのDSLに熟達した人材は相対的に少ないため、人件費が高くつく可能性がある。
  • 汎用プログラミング言語に比べてコード例を見つけにくい。