2011-01-24 10 views
8

複雑な固定長文字列と可変長文字列を作成する必要があります。これらの文字列は、顧客プロファイル、注文などを表しているかもしれません。JVMベースのプログラミング言語はお勧めしますか?どの言語(JVM上で動作する)はDSLの作成に最適ですか?

アイデアは、エンドユーザがこのDSLを使用して文字列を作成することです。だから私は検証、コード補完などを探しています。

+0

どのくらい速くする必要がありますか?どのくらいすぐにそれを作る必要がありますか? – EnabrenTane

+0

@EnabrenTane - 超高速である必要はありません –

+0

非常に速いのはどうですか?非常に速くなりますか?または超高速のみ? j/k:p – hhafez

答えて

5

Xtexthttp://www.eclipse.org/Xtext/)を使用すると、DSLを指定するときに便利なエディタが表示されます。

+0

私たちは、私たちのメタモデルとコード生成に関して幅広く取り組んでいます。私が経験したことから、編集者は弱いです。顧客対応アプリケーションの準備ができていません。 –

+1

@Pangea:それはおそらく、2年以上も維持されていないからです。 Xtextは書き直しで、最後のEclipseリリース・トレイン(Galileo)で1.0に達しました。このツールは、ユースケースに最適です。バリデーションと自動補完、アウトライン、ハイパーリンク、クイックフィックス、ハイライトなどを提供します。これらの事のほとんどは、提案された言語のいずれかを使用して内部DSLとして行うことは決してできません。 –

+0

このアップデートでは@Gabriel thxです。私は今これを調べます。新しいXtextを使って作成されたDSLの記事や例を教えていただければ幸いです。 –

-2

Apache Velocityテンプレートエンジンの問題点に似ています。これは、テンプレート構文またはDSLを備えたJavaライブラリです。

+2

私はDSLが必要です。テンプレートエンジンはオプションではありません。アイデアは、ユーザーがこのDSLを使用して文字列を作成することです。私はすでにVelocity、StringTemplateなどを見てきました。 –

+0

Figureは何をDSLですか? Velocityには言語があり、テキストコンテンツを生成するのに特に適しています。これはドメイン固有の言語です。テンプレートエンジンとその言語では満たされていない特定の要件がある場合は、その要件が何であるかを詳しく説明したいと思うかもしれません。 –

2

私はそれにはGroovyをお勧めします。

7

Use a Lisp。あなたが持っているいくつかの選択肢:

  1. Clojure
  2. JScheme
  3. SISC
  4. ABCL
  5. Bigloo(JVM上で動作するが、良いのJavaの相互運用性を持っていません)。

a good free book手で問題を解決するのが理想的である言語にのLispを成長させる方法すなわち、ソフトウェアボトムアップを設計するのLispの使用方法を説明しているがあります。

Forthファミリーの言語もDSLを定義するのに最適です。 JVM上で実行されるいくつかあります。

  1. Niue
  2. Misty Beach Forth
+0

Clojureで作成されたDSLのリストは次のとおりです。http://stackoverflow.com/a/3968289/410652 –

4

Scalaのすべての方法は! Scalaは内部DSLに特に適しています(plsはthisを参照)。

6

DSLには2種類あります。外部と埋め込み。

外部DSLはホスト言語とはまったく別物なので、通常はホスト言語でコードを生成するために使用されます。このアプローチでは、XTextとXPは、おそらく、単純な文法ファイルが新しいDSL用の完全なEclipseベースのエディタを生成し、XPでコードテンプレートを使用して実際のJavaコードを生成できるため、最良のツールです。 XTendとXPandはJavaで書かれていますが、プロセスの最後にJavaコードになってしまえば、何にでも書き込むことができます。このアプローチの欠点は、合理的に複雑な問題のためには、言語がかなり複雑になり、文法やさらに多くのコード生成テンプレートが必要になることです。式の評価のようなホスト言語の機能を使うことはできません。そのため、必要に応じてDSLで再構築する必要があります。 XTextにはXBaseが含まれますが、これはここで助けてくれる式を含む部分的な言語です。

他のアプローチは、上位レベルのドメイン機能がホスト言語で表現され、機能的言語で一般的に見られる高次の構造(HOFやモナドなど)またはマクロなどのメタプログラミング機能を使用して表現される埋め込みDSLです。 Lisp)。 Javaはこれらのどちらも持っていないので、DSLの仕事(または他の多くの形式の抽象プログラミング)にとっては悪い選択です。 Spring Rooは、生成を使用するJava用のメタプログラミング型の機能を提供しているので、オプションになる可能性があります。それに失敗すると、おそらくScalaはJVM言語のようなJavaの中で最も人気があり、必要な機能を備えています。

組み込みDSLは、ホスト言語を完全にサポートしているため、通常は外部DSLよりはるかに簡単です。私はScalaを試してみることをお勧めします。

+0

詳細な長所と短所をありがとう、ちょうど私のファンキーな愛されたjvm言語で* –

関連する問題