ドメイン固有の言語とは何ですか?それを使用している人はいますか?そして、どのように?

StackOverflow https://stackoverflow.com/questions/809574

  •  03-07-2019
  •  | 
  •  

質問

私は何らかのイントロを探して、誰かがそれを使用したかどうかを調べていると思います。それを使用する特別な利点はありますか?

ウィキペディア:

  

ドメイン固有言語(DSL)は、特定の専用のプログラミング言語または仕様言語です。問題ドメイン、特定の問題表現手法、および/または特定の解決手法。

どのように実装したか、または特定のシナリオでどのように役立つかについて、具体的な例を挙げることができますか?

役に立ちましたか?

解決

ドメイン固有の言語は、特定のドメインまたは一連の懸念に対処するために記述された言語です。ソフトウェアビルドを記述するためのmake、ant、rake、または言語構築のためのlexxおよびyaccなど、それらの多くが存在します。近年、いくつかのものが組み合わされて構築しやすくなり、人気を博しています。その中でも大きなものは、Rubyの人気が高まっていることです。Rubyには、新しいDSLを簡単に構築できる機能がいくつかあります。

こちらのように、Martin Fowlerはこのアイデアの大きな支持者です。

他のヒント

DSLは、より一般的なプログラミング言語で記述された関数の非常に複雑な引数と考えることができます。実際のプログラミング言語はDSLコードを解析してそれを処理します。通常、DSLコードはあなたがしたい だけに焦点を合わせ、より大きなシステムは how

DSLの例には、すべてのクエリ言語(SQL、XPath、...)、すべてのテンプレート言語(Django、Smarty、...)、シェルスクリプト、特にtwillのようなもの、コマンド駆動型Webブラウザー(主に使用)自動テスト用)、データストレージおよび交換言語(XML、YAMLなど)、およびLaTex、HTML、CSSなどのドキュメント言語。

TCLやLispのような非常に柔軟な構文を持ついくつかの言語は、可能であればDSLを直接言語に組み込みます。大部分の言語は、通常外部ファイルからロードされる文字列を使用します。

それらを使用する特別な利点はありますか?それらを意図した目的に使用することは、知らないうちにそれらに目を向けるという点で非常に有利です。これは、それらをDSLであると考えずにSQLまたはHTMLを使用していると思われます。

あなたが必要とするかもしれないどんな種類のアプリケーションに対しても十分なDSLがあることをあえて言います。ほぼ間違いなく、独自のコードの書き方を学ぶ必要はありません。

(質問の要点に対処する)

DSL のどこかと" domainとしての定義を見たのは初めてだと思います特定の言語"また、今まで聞いたことのない特定の具体的な言語だと思いましたが、特定のアプリケーション領域に合わせた言語の一般的な用語です。

皮肉なことに、 TCL を" tool command language"として聞いたことがある場合DSLのように、さまざまなツールに多くのTCLがあると思うかもしれませんが、いや、特定のスクリプト言語の特定の名前です。

特定のドメインの問題を解決するのに適した言語だと思います。ルール処理言語またはサービス記述言語である可能性があります。

ドメイン固有言語(DSL)の反対は汎用言語です。

DSLは、非プログラマーが使用する言語を開発するための良い方法です。たとえば、会社の財務担当者向けのDSLがある場合、仕様に合わせてプログラミングするのではなく、やりたいプログラムを作成させることができます。そして、遅すぎる場合は、彼らが書いたものを望み通りに動作させることができ、コンパイルされた言語で書いて速度を上げます。

すべてがDSLです...

アセンブラー:MOV R1 to R2
コンパイラ:割り当てステートメント-A = A + 1、条件付き-IF(TRUE)...、分岐-RETURN
HTML:...ネストされた構造を記述する
TCP / IP:宛先アドレス/宛先アドレス
PDF:紙にテキスト/画像の配置を記述する
フォント:文字の説明

特定のプロセスを記述するために使用する言語はすべてDSLです。残念ながら、最も基本的なプロセスを記述するためのドメイン固有の言語が不足しているため、私たちが行うすべてを記述するために必要ないくつかの言語を使用しています。 "私のWebサイトのすべてのhtmlファイルを圧縮します"完了するには3行または4行の300行が必要です。

DSLを構築するには、覚えておくことができ、ドキュメントを必要としないプロセスを記述するために必要な最小文字数を決定します。スピードと使いやすさが主要な設計基準であることを忘れないでください。構文解析は非常に高速であるため、使用する構文は問題ありません。ほとんどの場合、「月の初めに従業員に支払う」という構文として自然言語を好みますが、ドメイン固有とは、ドメイン固有です。問題に最適です。

便利ではあるが、データ(XML)を定義するために使用されたHTMLなどの問題に適合しない他のソリューションの使用は避けます。 CSVは非常に便利で、ほとんどの問題に適合します。 JSONは使いやすさの部分に適合せず、ほとんどの問題でCSVが機能するのに不要な複雑さを追加するのはやり過ぎです。 EXCELはDSLによく使用します。ツリー構造やメニューなど、65K〜1Mの行の下にある小さな問題の説明に最適です。列Aはレベル、他の列はアイコン、色、ラベルなどです(EXCELは編集可能なCSV)。

HTMLはページレイアウトの問題を実際には解決しないことがわかったので、HTMLを取り除き、適合するDSLを定義しました。ページに6つのリージョン、HEADER、BODY、FOOTTER、LEFT / RIGHT MARGINS、LEFT / RIGHT FULL MARGINSを定義しました。次に、ページジェネレーターに、特定のセルにタイトルバー、ステータスバー、メニュー、テーブル、フォームなどを追加するように指示できます。これらの各セルは、任意の深さまで行と列に分割できます。ページレイアウトは、どのスタイルでも数秒かかります。

BODYには従業員のテーブルが含まれています
HEADERには、タイトルバーのキャプション「Hello World」とCollins Softwareへのログインが含まれています

メニューDSLはページレイアウトDSLに適合しないため、メニュー用の一意のDSLを作成しました。

リソースマイメインメニュー
* define:menu、m、Level、Label、Icon、Action;
m、0、file;
m、1、open、open.gif、Dialog Open File;

各問題は独特で、コンピューターは任意の形式を使用できます。DSLは人間が設計したものであるため、人間が入力できるようにし、実際の単語から言語を作成できるようにします。というのは、私たちが説明しているのは実際の人、場所、そして物だからです。

まあ!上で説明したことがたくさんあります。私のような誰かが理解するように、私はこれをもっと簡単な方法で説明しようとします。

汎用言語は広大な目的に使用されるため、DSLは特定のドメインに対してのみ作成されます。 HTMLやCSSのような。

ある人またはあなたの唯一の親友だけが理解でき、他の誰もが理解できない論文に指示を書いた場合、あなたは言うことができます。それはDSLかもしれません。しかし、多くの人が理解して従うことができるような言葉で指示を書いた場合、これはDSLではありません。

コンピューターのシリアルポートを介して操作できるユーザー用のスイッチボードを作成し、そのボード上で実行できるそのボード用のプログラムが必要な場合、リレースイッチをオン/オフします。だから私はいくつかの指示を書き、これらの指示に従ってそのボードをプログラムするようにユーザーに言った。これはDSLの例です。新しい言語を発明したのではなく、マイクロコントローラーがEEPROMから読み取り、それに応じて解析し、特定のタスクを実行できる一連の文字列を作成しただけです。

DSLの使用が好きな理由を説明する簡単なブログ記事を書きました:

私たちは使用ドメイン固有言語(DSL)その他

その中で、DSLを次のように定義します。

  

特定の問題領域のソリューションを伝えるために特別に設計された小さなプログラミング言語。

使用に関して、Ant、構造化照会言語(SQL)、またはカスケードスタイルシート(CSS)を使用したことがある場合は、DSLを使用したことがあります。

DSLは、特定の問題空間へのソリューションの伝達を促進することに焦点を当てており、ドメインエキスパートの参加を促進する方法でDSLを使用するのが好きです。

ドメイン固有言語(DSL)の簡単な例の1つは、Webベースアプリケーションと呼ばれる特定のドメインに使用されるHTMLです。

最近DSLを聞いたことがありますが、本当に役立つ例があります:LUNA(以前のlunascript)。

これは、Asanaチームが独自のプラットフォーム用に作成したカスタムメイドのプログラミング言語/フレームワークです。

さらに見つけたように、多くの企業は適切な競争上の優位性を生み出すために独自のフレームワークと言語を作成しています。例は次のとおりです。

  • AbApを使用したSAP
  • PeopleSoft with PeopleCode
  • Objective-Cを搭載したApple
  • FacebookにはFBMLやFQLなどがあります

これらは、これらのプラットフォームでの作業にほぼ排他的に使用するため、ドメイン固有です。

この回答がコンセプトの明確化に役立つことを願っています。

機械学習で使用されるDSLの例は、Pythonのpatsyです。 https://patsy.readthedocs.io/en/latest/formulas.html#

Rからの式DSLに基づいています: https://stat.ethz.ch/ R-manual / R-devel / library / stats / html / formula.html

https://cran.r-project.org /web/packages/Formula/vignettes/Formula.pdf

そしてハドリーには、DSL w / Rの構築方法を説明した高度なR本の素晴らしいセクションがあります。 http://adv-r.had.co.nz/dsl.html

ディープラーニングの分野がある程度安定したら(または今でも)、Apache MXnetプロジェクト内で同様のことが起こるのを楽しみにしています。ただし、プロポーザルページ。

DSL-DomainSpecificLanguage

  

DSLは、あらゆる種類のソフトウェアの問題を対象とした汎用言語ではなく、特定の種類の問題を対象としたコンピューター言語です。

場所: 構成(TravisCI .yaml)、ビルドスクリプト( gradle )、ターゲットの依存関係(< a href = "https://guides.cocoapods.org/syntax/podspec.html" rel = "nofollow noreferrer"> pod )、UIプログラミング( Anko )など

DSLは宣言型プログラミングです-何を代わりに行うか方法を行う

外部DSL には独自のカスタム構文があり、それらを処理する完全なパーサーを作成します(XML、RegExp、SQL、HTML、CSS、UMLなど)。

内部DSL は、ホスト言語を使用して特定の言語(Lisp、Ruby、Javaアノテーション、マクロなど)の感覚をホスト言語に与える特定の方法です。

詳細こちらこちら

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top