DSL
領域特化言語。Domain-Specific Languageの略。
DSLは何か適当なプログラム言語によって操作される小さな言語である。
DSLを操作する言語をホスト言語と呼ぶ。
パーザが必要なものを外部DSL(external DSL)、ホスト言語に埋め込み可能なものを内部DSL(embedded DSL)と呼ぶ。
しかしDSLといえば大方後者を指す。また両方略してEDSLだが、EDSLといっても大体後者を指す。
何かプログラムの中で特定の操作をおこないたいときに、その操作を記述するのに特化した小さなプログラム言語があると、その操作をスッキリ書ける。評価器も自分で書けるので、扱うデータに応じて正格評価だけでなく遅延評価を選択する、なんてことも可能である。
評価器(interpreter)を自分で実装することから、デザインパターンの文脈ではInterpreter パターンと呼ばれる。
例えばScalaのビルドシステムsbtの設定ファイルsbtはScalaの内部DSLである(がsbtはfor式も書けるし計算もできるし難なくチューリング完全なのであまりDSL感がない)。
例えばHaskellにおいてDSLの項を data で定義し、モナドのインスタンスにすることでdo記法で手続き的に処理を書けるようになる。何か特定の操作をする、というのと手続き的な記述は相性がいい。 (c.f. モナド, Free monad) ryota-ka.icon アプリケーションのビジネスロジックを書くための eDSL を用意しておくといいぞい