ドメイン固有言語ガイド
ドメイン固有言語(DSL)とは、あらゆる種類のソフトウェア問題に対応する汎用言語ではなく、特定の種類の問題を対象としたコンピュータ言語です。ドメイン固有言語は、コンピュータが登場した当初から議論され、使用されてきました。
DSLはコンピュータの世界で非常に一般的です。例としては、CSS、正規表現、make、ant、SQL、Railsの多くの部分、JMockの期待値、graphvizのdot言語、strutsの設定ファイルなどが挙げられます。
私が重要かつ有用だと考えている区別は、内部DSLと外部DSLです。内部DSLは、ホスト言語に特定の言語の感覚を与えるためにホスト言語を使用する特定の方法です。このアプローチは、Lispの伝統の中で長い間受け継がれており、過去10年間にはRubyコミュニティによって再活性化されました。通常、そのような儀式の少ない言語の方が簡単ですが、JavaやC#のようなより主流の言語でも効果的な内部DSLを作成できます。内部DSLは、埋め込みDSLまたはfluent interfacesとも呼ばれます。
外部DSLは、独自のカスタム構文を持ち、それらを処理するためのフルパーサーを記述します。これはUnixコミュニティで強く受け継がれている伝統です。このバリエーションとして、XMLやYAMLなどのデータ構造表現でDSLをエンコードする方法があります。
今日、最も一般的なDSLはテキスト形式ですが、グラフィカルDSLも存在します。グラフィカルDSLには、言語ワークベンチのようなツールが必要です。言語ワークベンチはあまり一般的ではありませんが、プログラミングの方法を大幅に改善する可能性を秘めていると考える人もいます。
DSLは、インタープリターまたはコード生成のいずれかによって実装できます。インタープリター(DSLスクリプトを読み込み、実行時に実行)が通常は最も簡単ですが、コード生成が不可欠な場合もあります。通常、生成されたコード自体は、JavaやCなどの高水準言語です。
martinfowler.comのドメイン固有言語に関する資料のガイドです。
ドメイン固有言語
DSL Q & A
技術者以外の人向けにDSLの議論をまとめるように頼まれました。おそらくStephen O'Gradyを読みすぎたのかもしれませんが、どうしてもQ&A形式でやりたいという衝動に駆られました。というわけで、ここに掲載します。
DSLの境界線
ドメイン固有言語の話題が出ると、よくある疑問の1つは、正確に何がDSLであり、何がDSLでないかということです。問題は、DSLの正確な定義がなく、DSLと他のものとの間に大きなグレーゾーンがあることです。
言語ワークベンチ:ドメイン固有言語のキラーアプリ?
ソフトウェア開発におけるほとんどの新しいアイデアは、実際には古いアイデアの新しいバリエーションです。この記事では、私が言語ワークベンチと呼ぶツールクラスの成長しているアイデア、たとえばIntentional Software、JetBrainsのメタプログラミングシステム、MicrosoftのSoftware Factoriesについて説明します。これらのツールは、私が言語指向プログラミングと呼ぶ古いスタイルの開発を取り入れ、言語指向プログラミングを有効なアプローチにするためにIDEツールを使用します。彼らが野望を達成できるかどうかを予言するほどではありませんが、これらのツールはソフトウェア開発の地平線上で最も興味深いもののいくつかであると思います。少なくとも概要として、それらがどのように機能し、将来の有用性に関する主な問題を説明するために、このエッセイを執筆するのに十分なほど興味深いものです。
適応モデルへのリファクタリング
私たちのソフトウェアロジックのほとんどはプログラミング言語で書かれており、これらはそのようなロジックを記述および進化させるための最良の環境を提供します。しかし、そのロジックを、命令型コードが解釈できるデータ構造(私が適応モデルと呼ぶもの)に移行することが便利な状況があります。ここでは、JavaScriptでの製品選択ロジックを示し、JSONでエンコードされた単純な本番ルールシステムにリファクタリングする方法を示します。このJSONデータを使用すると、異なるプログラミング言語を使用するデバイス間でこの選択ロジックを共有し、これらのデバイスのコードを更新せずにこのロジックを更新できます。
ビジネスで読みやすいDSL
DSLを使用すると、ビジネス担当者はプログラマーを介さずにソフトウェアルールを記述できるようになりますか?
DSLについて話すとき、ビジネス担当者が自分でコードを書くという問題がよく提起されます。私はこの考え方にCOBOLの推論を適用するのが好きです。つまり、COBOLの当初の目的の1つは、プログラマーなしでソフトウェアを記述できるようにすることでしたが、それがどのように機能したかをご存知でしょう。したがって、プログラマーなしでコードを記述する計画が立てられるときはいつでも、COBOL(および他の多くのもの)が失敗したところで成功する特別な理由を尋ねなければなりません。
構文ノイズ
ドメイン固有言語(または実際には任意のコンピュータ言語)について話すときに、よく使われるフレーズは、構文ノイズです。RubyはJavaよりもノイズが少ない、または外部DSLは内部DSLよりもノイズが少ないと言うかもしれません。構文ノイズとは、人々が本当に言いたいことの一部ではなく、言語定義を満たすために存在している余分な文字のことです。ノイズ文字は、プログラムの意味を曖昧にし、プログラムが何をしているのかを解明しなければならなくなるため、良くありません。
DSLカタログ
私のドメイン固有言語に関する書籍では、私がDSLを説明するために使用する概念を整理するためにパターン構造を使用しています。このカタログは、その書籍のパターンのリストです。それぞれが各パターンのページにリンクされています。ページには詳細があまり含まれていませんが、各パターンの参照URIを提供します。