どの言語(JVMで実行される)は、DSLの作成に最適ですか?
-
23-10-2019 - |
質問
複雑な固定長と可変長さの文字列を作成する必要があります。これらの文字列は、顧客プロファイル、注文などを表す可能性があります。どのJVMベースのプログラミング言語を提案していますか?
アイデアは、エンドユーザーがこのDSLを使用して文字列を作成することです。だから私は検証、コードの完了などを探しています。
解決
と Xtext (http://www.eclipse.org/xtext/)DSLを指定するときは、素敵なエディターを無料で入手できます。
他のヒント
DSLには2つのタイプがあります。外部および組み込み。
外部DSLは、ホスト言語とは完全に分離されています。つまり、言語の外でそれを書きますが、通常はホスト言語でコードを生成するために使用されます。このアプローチでは、単純な文法ファイルが新しいDSLの完全なEclipseベースのエディターを生成するため、XPANDを使用したXTEXTはおそらく最高のツールであり、XPANDのコードテンプレートを使用して実際のJavaコードを生成できます。 XTENDとXPANDはJavaで書かれていますが、プロセスの最後にJavaコードを使用する限り、これは何でも書かれているため、偶発的です。このアプローチの欠点は、合理的に複雑な問題のために言語が非常に複雑になり、文法で多くの作業が必要になることです。式評価などのホスト言語機能を使用することはできないため、必要に応じてDSLで再構築する必要があります。 Xtextには、ここで支援する表現を含む部分言語であるXbaseがまもなく含まれます。
もう1つのアプローチは、高次のコンストラクト(HOFやモナドなど)が機能的言語で一般的に見られる、またはマクロなどのメタプログラミング施設(LISP)を通じて、高レベルのドメイン機能がホスト言語で表現される埋め込みDSLです。 Javaにはこれらのどちらもないので、DSLの作業(または他のほとんどの形式の抽象プログラミング)には悪い選択です。 Spring Rooは、Generationを使用してJava用のメタプログラミングタイプの施設を提供するため、オプションになる可能性があります。それに失敗すると、Scalaはおそらく人気があり、必要な施設を持っているJVM言語のような最もJavaです。
埋め込まれたDSLは通常、外部DSLよりもはるかに簡単です。これは、ホスト言語の完全なサポートがあるため、Scalaを試すことです。
ずっとスカラ! Scalaは内部DSLに特に適しています(pls参照 これ).
私がお勧めします グルーヴィー そのために。
Jrubyを提案します。私はいくつかやったことがありますが、私が望むものを手に入れることは常に非常に簡単でした。
Apache Velocityテンプレートエンジンの問題のように聞こえます。そうであれば、テンプレートの構文またはDSLを備えたJavaライブラリです。