54

私はいくつかのプロジェクトでEclipseXtextを使用しました。Ecore(メタ)モデルで文法を定義し、すばらしいEclipseプラグインエディターを含むすべてを生成できるようにするのは簡単でしたが、静的フィールドにすべてが組み込まれている基盤となるEMFフレームワークにはかなり不快でした。

最近、JetbrainsのMPS(メタプログラミングシステム)に出くわしました。それは完全に異なる哲学に基づいています。XtextはテキストベースのDSLを作成してパーサーを生成する(そしてそれらのEObjectをインスタンス化する)ためのものですが、MPSで作成された言語では、基礎となるモデル構造を直接編集します。これまでのところ、私はそれを取得します。

これらのDSLツールの操作、使用目的と対象者、複雑さ、学習曲線の主な違いを指摘するために、これらのDSLツールの両方を使用した経験はありますか(正直なところ、Xtextの使用を開始するには、EMFの根性についてかなり知っている必要があります) 、コード生成など?

4

3 に答える 3

59

Xtextは、通常のテキストファイルで機能する従来のパーサーベースのアプローチです。これらは、メールで送信、保存、および任意のバージョン管理システムと比較したり、お気に入りのコマンドラインツールを使用してエディターの外部で変更したりすることもできます。これはEclipseEMFに緊密に統合されており、Eclipseエコシステムにある多数のツールと非常にうまく連携します。最近、それはある種の「プログラミング言語開発ツールキット」に進化しました(そして今もそうしています)。そこでは、あらゆる種類の追加ツールをサポートすることができます。

反対側のMPSは、環境内で作業している間はテキストのように「見える」プロジェクションベースのエディタで動作します。基盤となるストレージ形式はツール固有であり(読み取り:特別なプログラムがないと使用できません)、プレーンテキストファイルを解析しません。これには、任意の言語の埋め込みなど、いくつかの大きな利点があります(たとえば、Java内のSQL内の正規表現)。ツールチェーンを使用すると、モデルからモデルへの変換をモデル化できます。これは、編集者としては最初は珍しいと感じますが、強力でもあります。

どちらのツールも、どういうわけかあなたを彼らの世界(MPS / Eclipse)に閉じ込めています。両方をヘッドレスモードで実行できたとしても、別のIDE内でXtextエディターを簡単に起動することはできません。同じことがMPSにも当てはまります。Xtextは、一方では通常のテキストファイルで動作し、他方では確立されたツール(EMFおよびEclipse一般)でうまく動作するため、「よりオープン」であると私は主張します。

これはあなたの質問に答えますか?より詳細な質問がある場合は、より正確な回答を提供するように努めます。

于 2010-04-09T09:14:07.477 に答える
17

MPSの主なアイデアは、テキストベースのエディターの代わりにプロジェクションエディターを使用することではありません。それは言語の互換性です。たとえば、Javaをタプルで拡張したり、別の人が非同期メソッド呼び出しでJavaを拡張したりできます。テキストベースのツール(XTextなど)では、結果の文法があいまいになる可能性があるため、2つの拡張機能がうまく連携することを保証することはできません。MPSはこれを可能にします。ライブラリを追加するのと同じように、プロジェクトに言語を追加するだけです。

于 2010-11-26T11:13:50.870 に答える
17

私の意見では、JetbrainのMPSは最初は習得しやすいです。xtextのワークフローファイルのような構成ファイルを操作する必要はありません。

主な違いは、MPSではモデルを直接編集し、このモデルが構文/エディタービューで表示されることです。xtextで構文を編集すると、モデルが生成/解析されます。

私の意見では、MPSはより強力です。言語をはるかに簡単に組み合わせて拡張することができます。プロジェクションエディタの大きな利点は、モデルから取得した情報を非表示にしたり、追加情報を表示したりできることです。表やグラフなどのさまざまなビューを使用することもできます(MPS 2.1で登場)。

バージョン管理はMPSで行うことができます。ツリーモデルで機能するマージ/差分ツールがあります。

于 2011-04-15T10:44:13.930 に答える