Devsway

日々の記録とか記憶とか。


はじめに


テストライブラリいじってたら出てきた言葉です。


DSLとは?


ドメイン固有言語(DSL)は、特定のアプリケーションドメインに特化したコンピューター言語です。これは、ドメイン全体に広く適用できる汎用言語(GPL)とは対照的です。 WebページのHTMLなどの一般的なドメインで広く使用されている言語から、MUSHソフトコードなどの1つまたはいくつかのソフトウェアでのみ使用される言語まで、さまざまなDSLがあります。


DSLは、言語の種類によってさらに細分化でき、ドメイン固有のマークアップ言語、ドメイン固有のモデリング言語(より一般的には、仕様言語)、およびドメイン固有のプログラミング言語が含まれます。特殊用途のコンピュータ言語は常にコンピュータ時代に存在してきましたが、「ドメイン固有言語」という用語は、ドメイン固有モデリングの台頭により、より一般的になりました。よりシンプルなDSL、特に単一のアプリケーションで使用されるDSLは、非公式にミニ言語と呼ばれることがあります。


言語は特定のドメインに特化した機能を持っているかもしれないが、より広く適用可能であるか、または逆に、原則的に幅広いアプリケーションが可能であるが、実際には主に特定のドメイン。たとえば、PerlはもともとAWKやシェルスクリプトと同じドメイン用にテキスト処理および接着剤言語として開発されましたが、その後は主に汎用プログラミング言語として使用されました。対照的に、PostScriptはチューリング完全言語であり、原則としてあらゆるタスクに使用できますが、実際にはページ記述言語として狭義に使用されています。


要約すると、類推は役立つかもしれません。VeryLittle Languageはナイフのようなもので、食べ物を切ることから木を切ることまで、何千もの異なる方法で使用できます。ドメイン固有の言語は、電気ドリルのようなものです。多種多様な用途を持つ強力なツールですが、特定のコンテキスト、つまり、物に穴をあけることです。汎用言語は、さまざまな機能を備えた完全なワークベンチです


なるほど。。。



言語内DSL=内部DSL…


の場合

DSLとAPIの違いってなに?

RSpec はプログラムの振舞を記述する言語として、Ruby を拡張することを選びま した。このような、DSL を定義する言語と DSL を実行する言語 (ホスト言語) とが 同じである DSL の実装アプローチを「言語内 (internal) DSL」と呼びます。



DSLとAPIの違いは何ですか?


APIはホスト言語の構文を使用しますが、DSLは独自の構文を導入しているため、構文を解析する必要があります。

さて、これはその時の難問です。構文を拡張する方法をサポートしない言語で新しい構文を作成することはできません(Lispマクロを参照してください。ここでTCLについても触れます)。そのため、通常「DSL」と呼ばれるもの(つまり、メソッドチェーン言語、演算子のオーバーロード)のほとんどはそうではありません。


ですから、ドメイン固有のAPI、つまりDSAPIと呼んでもいいでしょう。


JavsScriptみたいな構文を拡張できるやつに関しては内部DSLと言えるって感じか。。

あんまりちゃんとした定義もないのかな?


別言語みたいに見えるかどうか?違うな。。


https://news.ycombinator.com/item?id=403870


参考


https://en.wikipedia.org/wiki/Domain-specific_language




カテゴリー

オレオレIT用語辞典