DSL には、TCL と Lisp のどちらが優れていますか? Java(C#)-TCL バインディングと Lisp(Scheme) のバインディングについて何が言えますか? .Net 開発に適用できる DSL ツールはどれですか? (Microsoft DSL ツールを除く)
8 に答える
JVM に簡単にアクセスしたい場合は、Clojure を使用できます。
DSL は好きなように設計できることに注意してください。「Lispy」構文を使用する必要はありません。私のお気に入りの例は、Common Lisp 標準にあります。拡張された LOOP 構文は、実際にはループ用の DSL であり、マクロに実装されています。
TCL と LISP のどちらかを選択する場合、私は毎回 TCL を選択します。それは、私が TCL に精通していることと、TCL を独自のコマンドで拡張することも、他のソフトウェアに組み込むことも簡単だからです。
JAVA インタラクションには、jacl と tclblend があります。http://tcljava.sourceforge.net/はこれらのパッケージの良い出発点であり、http: //www.tcl.tk/ は TCL っぽいものすべてです。
.Net 上の DSL の場合、Booは開始点として非常に優れています。Unity3D の背後にいる人たちは、それを「JavaScript」スクリプト言語に使用しています。Second Life でさえ、LindonScript2.0 か何かを作成していると思います。この男 Ayende (彼にとっては Google) がそれについての本を出版していると思います。この頃...
誰が DSL を使用するかによって異なります。IT ドメインの専門家以外を想定している場合は、TCL のようなシンプルでわかりやすいものをお勧めします。LISP を理解していない人が作成した大規模な LISP プログラムをデバッグする場合と同様に、IT の卒業生ではない人に LISP の楽しさを説明することは深刻な問題です。
b = a + 1 が B = INCR(A) と書かれていることを誰かに説明することも、あまり良い考えではありません。
Python をお勧めします。ドメイン固有のコードを 1 つまたは 2 つのスペシャリスト クラスに埋め込むことができます。非 IT ユーザーが単純な読み取り可能なプログラムをコーディングできる言語があり、IT スペシャリストがコーディングできる内容に制限はありません。
アプリケーションのより広いターゲットが問題になる場合は、いつでも Lisp よりも TCL を選択します。人々はリストよりも自分の考えを処理したいと思うでしょう。:) (関数型プログラミングの視点を与えてくれた Lisp に感謝します。
それに加えて、正当な理由がない限り(つまり、軽量である、または非常に特殊なDSLのニーズがあるなど)、 PythonまたはJavascriptが今日の世界のIMHOの拡張言語であるべきだと付け加えなければなりません。
ps。これは .NET に関するものなので、 IronPythonが Python のバージョンです。
マーティンファウラーのブログをチェックしてください。それが私がDSLを始めたきっかけです。 FluentInterfacesは一種のDSLです。
RhinoMocksの名声のAyendeには本が出ています
これは、C#用に作成した外部DSLの例の1つです。そして、これが私がLispで書いたものです。
DSLを作成するためのTCLまたはJAVAの経験はありません。
Lisp でさえ、CDR のようないくつかの奇妙なコマンドを持っているようです (非 LIST 指向の言語から来ていない場合) TCL にはいくつかの「奇妙な」ものがあります。どの構文が自分の脳に最も適しているかを検討する必要があります。
たとえば、TCL を使用する非常にまばらな構文と set を使用した変数の割り当てに問題がない場合、多くのメタプログラミング機能を備えたよりリッチで非常に強力な構文が必要であり、すべてを丸括弧に入れて常に開始することを気にしない場合(+ 2 3) のような演算子 (2 + 3 ではない) を使用すると、LISP を選択する必要があります。