2

アプリケーション内に DSL または既存の完全な言語を埋め込みたいと考えています。シンプルで完全なチューリング完全な言語である必要がありますが、オーバーヘッドが大きくなりすぎずにコードを解釈できるほどシンプルで軽量でなければなりません。

また、他の「プロセス」は他のプロセスに影響を与えることはできません。

Clojure を使用し、Clojure コードで Clojure インタープリター/ランタイム コンパイラを呼び出すことを検討していましたが、Clojure ランタイムは必要以上に時間がかかります。また、このプロジェクトで Clojure 言語を使用することにあまり興奮していません。私はもっ​​と手続き的でCのようなものを考えていました。

オラ・ビーニのイオケ語を考えてみました。http://ioke.org/index.html

また、Scala で DSL を書くことも検討しました。または、既存の DSL を使用します。

更新: Rhino は組み込み言語の良い例のようです。

http://www.mozilla.org/rhino/tutorial.html

4

6 に答える 6

14

JavaScriptはどうですか?

http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html

Java6に組み込まれています。

于 2009-10-20T21:55:13.863 に答える
9

Groovyの動的な性質は、DSLの作成に最適です。実際、GrailsWebフレームワークによって実装されたGroovyDSLは多数あり、Groovyを使用してDSLを作成する方法を教えるチュートリアルや書籍がたくさんあります。

また、Groovyの構文はほとんどJavaのスーパーセットであるため、(Clojureと比較して)比較的簡単に理解できるはずです。JavaとGroovyコード間の呼び出しはシームレスであるため、Groovyコード内でお気に入りのすべてのJDKクラスを簡単に使用できます。

IOKEは未成熟であるため、避けたいと思います。DSLの目的では、GroovyやJavaScriptのような動的型付け言語の方がScalaよりも優れていると思います。

于 2009-10-20T21:53:00.977 に答える
2

Javaアプリケーションに他の言語を埋め込むためのスクリプトエンジンのリストについては、scripting.dev.java.netを確認してください。参照されている言語の一部には、独自のJSR 223統合が付属しているため、サードパーティのライブラリで使用する必要がないことに注意してください。

于 2009-10-21T09:38:16.880 に答える
2

Javaをお勧めします。それは、よく知られており、高速で、Java との統合が容易で、安定しており、静的に型付けされており、コードの移行が容易などです。

于 2009-10-20T22:22:00.853 に答える
1

DSLが必要な場合は、既存の言語を実際に埋め込むのではなく、「ドメイン固有言語」を作成する必要があります。私にとって、それは単にいくつかのキーワードを変更し、括弧を使用しないこと以上のことを意味します。

たとえば、私は今、テレビのスケジューリングに取り組んでいます。テスト用の偽のガイドデータを作成するときは、常に次のようなコメントを追加します(私が取り組んでいるテストから直接切り取ったものです)。

 * TIME:8.....30....9.....30....10....30....11....30....12....30....
 * 4FOX:____________[Spotlight.............][Jeopardy..]____________
 * 6CBS:[Heroes....][Heroes....][Heroes....]________________________
 * 8HMK:xx[A.River.Runs.Through.It....][Blades.Of.Glory...]_________

さらにガイドデータを作成する必要がある場合は、それらのコメントをDSLとして直接解釈します(コメントの代わりに長い文字列または文字列配列にします)。

それは適切なDSLです。

柔軟な言語を埋め込んだ直後であれば、BeanShellと同様に、GroovyまたはJRubyの両方がこのために作られています。

実際、交換可能なプラグインスクリプト言語を中心に構築されたAPI全体が存在するため、コードを少し変更することなく、必要なJVM言語をドロップできます。

于 2009-10-20T22:11:22.090 に答える
-1

あなたの仕様によれば、小さな BrainF*ck インタープリターは問題ないはずです:)

思い描いていたものと違う場合は、何を解決したいのかを考えてください。あなたのケーススタディは何ですか?アプリケーションの新しいバージョンを再デプロイすることなく、後で自由に新しいコードを追加できるようにするためですか?

于 2009-10-20T22:54:03.173 に答える