web-dev-qa-db-ja.com

JetbrainsのMPSとEclipseXtextの主な違いは何ですか?

私はいくつかのプロジェクトで Eclipse Xtext を使用しました。私はEcore(メタ)モデル上で文法を定義し、素晴らしいEclipseプラグインエディターを含むすべてを生成できるようにするのが簡単であることが好きでしたが、基礎となる EMFフレームワーク すべてがハードワイヤードであることに非常に不快でした静的フィールド。

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

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

51
Karel Smutný

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

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

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

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

56
Heiko Behrens

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

16

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

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

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

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

15
Michael Brunner