私はある種のイントロを探していて、誰かがそれを使用したかどうかを確認していると思います。それを使用することの特別な利点はありますか?
ウィキペディア:
ドメイン固有言語(DSL)は、特定の問題ドメイン、特定の問題表現手法、および/または特定のソリューション手法に特化したプログラミング言語または仕様言語です。
誰かがあなたがそれをどのように実装したか、または特定のシナリオでどのように役立つかについて、具体的な例を誰かに与えることはできますか?
私はある種のイントロを探していて、誰かがそれを使用したかどうかを確認していると思います。それを使用することの特別な利点はありますか?
ウィキペディア:
ドメイン固有言語(DSL)は、特定の問題ドメイン、特定の問題表現手法、および/または特定のソリューション手法に特化したプログラミング言語または仕様言語です。
誰かがあなたがそれをどのように実装したか、または特定のシナリオでどのように役立つかについて、具体的な例を誰かに与えることはできますか?
回答:
ドメイン固有言語は、特定のドメインまたは一連の問題に対処するために作成された言語です。ソフトウェアビルドを記述するためのmake、ant、rake、言語構築のためのlexxやyaccなど、それらはたくさんあります。近年では、それらを組み合わせて構築を容易にするために、それらが人気を博しています。これらの中で最も重要なのは、Rubyの人気が高まっていることです。Rubyには、新しいDSLを簡単に構築できるいくつかの機能があります。
DSLは、より一般的なプログラミング言語で記述された関数の過度に複雑な引数と考えることができます。実際のプログラミング言語はDSLコードを解析して何かを行います。通常、DSLコードは、やりたいことだけに焦点を当てており、大規模なシステムではその方法がわかります。
DSLの例には、すべてのクエリ言語(SQL、XPathなど)、すべてのテンプレート言語(Django、Smartyなど)、シェルスクリプト、特にツイルなどのコマンド、コマンド駆動のWebブラウザー(主に自動テストに使用)が含まれます。 )、データストレージおよび交換言語(XML、YAMLなど)、およびLaTex、HTML、CSSなどのドキュメント言語。
TCLやLispのような非常に柔軟な構文を持つ一部の言語は、DSLを直接言語に組み込みます(可能な場合)。言語の大部分は文字列を使用し、通常は外部ファイルからロードされます。
それらを使用することの特別な利点はありますか?意図した目的でそれらを使用することは、DSLとは考えずにSQLまたはHTMLを使用している(私は推測する)のと同じように、知らないうちにそれらに目を向ける点で非常に有利です。
あえて言うと、あなたが必要とするかもしれないあらゆる種類のアプリケーションのために十分なDSLがそこにあるということです。ほとんどの場合、独自の方法を学ぶ必要はありません。
すべてがDSLです...
アセンブラー:MOV R1からR2
コンパイラー:割り当てステートメント-A = A + 1、条件-IF(TRUE)...、ブランチ-RETURN
HTML:...ネストされた構造を記述
TCP / IP:記述/変換アドレス
PDF:紙のテキスト/画像配置の
説明フォント:文字の説明
特定のプロセスを説明するために使用する言語はすべてDSLです。残念ながら、最も基本的なプロセスを説明するためにドメイン固有の言語が不足しているため、すべてのことを説明するために必要ないくつかの言語を使用しています。「私のウェブサイトのすべてのhtmlファイルを圧縮する」には、3行または4行の300行を完了する必要があります。
DSLを構築するには、覚えておくことができ、ドキュメントを必要としないプロセスを説明するために必要な最小文字数を決定します。速度と使いやすさが主要な設計基準であることを忘れないでください。構文解析は非常に高速で、使用する構文は問題ありません。ほとんどの場合、構文として自然言語を使用します。「月初に従業員に支払う」ですが、ドメイン固有のものは、ドメイン固有のものであり、最適な構文を決定します問題に適合します。
便利かもしれないが、データ(XML)の定義に使用されたHTMLなどの問題に適合しない他のソリューションの使用は避けます。CSVは非常に便利で、ほとんどの問題に適合します。JSONは使いやすさの部分に適合しません。CSVがほとんどの問題で機能していれば、不必要な複雑化を追加するのはやり過ぎです。私たちはDSLにEXCELをたくさん使用します。これは、ツリー構造やメニューなどの65Kから100万行未満の小さな問題を説明するのに最適です。列Aはレベル、他の列はアイコン、色、ラベルなどです(EXCELは編集可能なCSV)。
HTMLはページレイアウトの問題を実際には解決しないことがわかったので、HTMLを削除して、適切なDSLを定義しました。ページ上で、HEADER、BODY、FOOTER、LEFT / RIGHT MARGINS、およびLEFT / RIGHT FULL MARGINSの6つの領域を定義しました。次に、ページジェネレーターにタイトルバー、ステータスバー、メニュー、テーブル、フォームなどを特定のセルに追加するように指示できます。これらの各セルは、行と列に任意の深さに分割できます。ページレイアウトは、どのスタイルでも数秒かかります。
BODYには従業員のテーブルが含まれています
HEADERにはタイトルバーのキャプション「Hello World」が含まれており、Collins Softwareにログインしています
メニューDSLはページレイアウトDSLに適合しないため、メニュー用に独自のDSLを作成しました。
リソースMy Main Menu
* define:menu、m、Level、Label、Icon、Action;
m、0、file;
m、1、open、open.gif、Dialog Open File;
それぞれの問題は固有であり、コンピューターは任意の形式を使用できます。DSLはそのために設計された人間です。したがって、人間が理解できるようにし、DSLが入力できるようにし、実際の単語から言語を作成します。なぜなら、それは私たちが説明している実際の人、場所、物事です。
DSLは、非プログラマーが使用する言語を開発するための良い方法です。たとえば、会社の金融関係者向けのDSLがある場合、仕様に合わせてプログラミングするのではなく、やりたいプログラムを書かせるだけです。次に、遅すぎる場合は、彼らが書いたものを彼らが望むように機能させることができます。コンパイルされた言語でそれを書いてスピードアップします。
上手!上記で説明したことはたくさんあります。私のような誰かが理解するように、私はこれをはるかに簡単な方法で説明しようとします。
汎用言語は広範な目的で使用されるため、DSLは特定のドメインに対してのみ作成されます。HTMLやCSSのように。
ある人またはあなたの親友だけが理解でき、他の誰も理解できないような文書に指示を書いたかどうかを言うことができます。それからそれはDSLかもしれません。しかし、多くの人々が理解し、従うことができるような言葉で説明を書いた場合、これはDSLではありません。
コンピュータのシリアルポートを介して操作できるユーザー用のスイッチボードを作成しました。ユーザーはそのボードで実行できるプログラムをそのボード上で実行したいとし、それに応じてリレースイッチがオン/オフされます。だから私はいくつかの指示を書いて、ユーザーにこれらの指示に従ってそのボードをプログラムするように言いました。これはDSLの例です。私は新しい言語を発明したのではなく、マイクロコントローラーがEEPROMから読み取り、それに応じて解析し、特定のタスクを実行できる一連の文字列を作成しました。
DSLを使用する理由を説明する簡単なブログ投稿を書きました。
その中で、DSLを次のように定義しています。
問題の特定のドメインに対するソリューションを伝達するために特別に設計された小さなプログラミング言語。
使用に関しては、Ant、構造化照会言語(SQL)、またはカスケードスタイルシート(CSS)を使用したことがある場合は、DSLを使用したことがあります。
私はDSLを使用するのが好きです。DSLは特定の問題空間に対するソリューションのコミュニケーションを促進することに重点を置いており、ドメインの専門家の参加を促進する方法でそうするためです。
私はDSLを最近聞いたばかりですが、本当に役立つ例、LUNA(旧lunascript)を見つけました。
Asanaチームが独自のプラットフォーム用に作成したカスタムメイドのプログラミング言語/フレームワークです。
さらに私が見つけたように、多くの企業は適切な競争上の優位性を生み出すために独自のフレームワークと言語を作っています、いくつかの例は:
これらは、これらのプラットフォームでの作業にほぼ排他的に使用するため、ドメイン固有です。
この回答が、概念を明確にするのに役立つことを願っています。
機械学習で使用されるDSLの例は、Pythonのpatsyです。 https
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
そして、ハドリーは彼の高度なRの本の素晴らしいセクションで、R / DSLを構築する方法を説明しています: http://adv-r.had.co.nz/dsl.htmlを
深層学習の分野がある程度安定したら(または今でも)、Apache MXnetプロジェクト内で同様のことが発生するのを見てみたいと思います。しかし、私はまだ提案ページでそのための提案を見ていません。
ドメイン固有の言語は、ドメインプロセスと知識を、特定の分野の概念とロジックを直接使用する言語で表現します。
コミュニティは確実に成長していますが、それでも他の「主流」のテクノロジーのレベルにはありません。
ほとんどの場合、DSLは企業内の生産性を向上させるために作成されているため、DSLは非公開にして結果/洞察を共有しません。
ここでは、スピーカーがJetBrains MPSを使用したDSLのいくつかの例を示し、射影編集のテクノロジーを使用した会議があります。https://vimeo.com/197381453
DSL-ドメイン固有の言語。ドメインとは何かを始めましょう-ドメインは、定義された領域、スコープです。このドメインはWebサイトの外観にすることができ、CSSと2番目のドメインはWebサイトの構造にすることができ、ここにHTMLがあります。
ただし、ドメインはCompany X Applicationにすることもできます。このドメインの範囲内で、いくつかの言語を作成できます。言語は意味しません-独自のグラマ、シンタックス、コンパイラー、またはランタイムを備えた完全なフレーバーのこと DSLは、ドメインの問題を解決するツールのリストにすぎません。
OOPとそのモデルを考慮して、ドメインオブジェクトをクラスとメソッドでオブジェクトの動作として表現します。そのような構造を作成し、これらのオブジェクトに動作を与えると、それらの概念を使用してコードを書くことができます。次の疑似コードの例を考えてみます。
cookie = async getCookie(cookieId)
user = async getUser(userId)
result async user.buy(cookie)
if (result.isError()) {
error.showAlert("User has not enough money")
} else {
confirmation.showSuccess("Cookie was bought")
}
上からどれほどの量がGPL(汎用言語)であり、どれだけ特定のドメイン用語とツールです。これは2つの組み合わせですが、すべてのコマンドはここではドメイン固有です。とは言っても、上記はドメインがアプリケーションxであるDSLで記述されていると言えます。
この例をさらに進めると、さらに抽象的なツールを作成し、ほとんどの場合それらのツールによって制御フローを実行することができます(これはより多くのFPですが、意味がわかることを願っています)。
waitForMany(getCookie(cookieId), getUser(userId)
.andThen([cookie, user] -> user.buy(cookie))
.andThen(showSuccess("Cookie was bought"))
.whenError(showError("User has not enough money"))
ご覧のとおり、私はかなり抽象化でき、この抽象化を使用して制御フローを実行できました。そして、すべてがGPLに基づいており、GPLの範囲で動作します。
真実を明らかにするために、私たちはみなDSLを書いています。uが使用できるすべてのドメイン固有の抽象化は親切です。しかし、これらの抽象化のほとんどは完全な解決策ではないため、この単語をあまり頻繁に使用しないようにしています。しかし、ドメインを抽象化する一連のツールや機能がある場合、それらは一種のDSLを形成します。
DSLとは何か、たとえば、一連のルールを提供するフレームワークはDSLです。彼がReact開発者であると主張している人を見ると、ReactはまさにDSLであり、ネイティブWebプラットフォームを使用する代替手段であるため、彼はドメイン固有の開発者であることがわかります。既存のドメイン固有のツールから機能を構成できる場合は、DSLを使用して作成しています。Reactをさらに深く見て、このDSL:Dを使用していないすべての人に申し訳ありませんが、コンポーネントのセットを作成し、それらをビルディングブロックとして構成できます。そしてhurra!、DSLの上にDSLを作成しました。
申し訳ありませんが、ここではDSLを何度も繰り返しました。