2010-12-07 4 views
15

Xtext、Spoofax、JetBrainsのMPSなどの言語ワークベンチツールでの作業経験がある人はいますか?私は1つを試してみると、さまざまなツールの良い比較を見つけるのは苦労している。それぞれの長所と短所は何ですか?XtextやMPSなどの異なる言語のワークベンチツールの長所と短所はありますか?

私はPythonコードを生成するDSLをビルドしようとしていますので、これらのツールのいずれかをPythonで使用した人から聞くことに特に興味があります。 ?)。 DLSは主に私自身のためのものなので、構文を定義してコードジェネレータを書くためにKISSを使っているよりも、本当にきれいなIDEを構築することはあまり気にしません。 DLSの型チェック/静的解析を実行する能力もかなりクールです。

私は少し遠い道のりで壁にぶつかり、自分のコードが他のものに移植できない形式になっていることを少し恐れています。私はそれを理解するので、実際にテキストベースの構文を生成するのではなく、むしろASTのための特別なエディタを構築するので、特にMPSは少し怖いようです。

+1

Spoofax b/cは、かなり豊富なプログラム変換言語(Stratego)に裏打ちされているように見えますが、これは実際にはDSLを構築する肉とポテトだと思います。 – josh

+1

この時点で、私はStratego/SpoofaxとPythonで(ANTLR経由で)私自身のパーサー/インタープリタを構築するかそれに類するものに絞った。私の感覚は、StrategoがASTを操作するためのより良いパラダイムを提供していることですが、Pythonコードを出力してからコードを実行する必要があるため、write-build-testサイクルはきれいではありませんアプリケーション全体をPythonで管理します。 – josh

答えて

13

Markus Voelterは、セールスラジオとSoftware ArchitekTOURポッドキャストの3つを比較するとかなり良い仕事をしています。 基本的な考え方は、Xtextが最も使用され、したがって最も安定して文書化されており、それを取り巻く普及しているEclipseプラットフォームとモデリングエコシステム(EMF)に基づいているということです。一方、それはパーサーベースでANTLRを内部的に使用します。つまり、定義できる文法の種類が限られており、言語を簡単に組み合わせることはできません。 Spoofaxは、これらの3つのうち最も少なく採用されている学術製品です。これはパーサーベースでもありますが、言語の組み合わせを可能にする独自のパーサジェネレータを内部的に使用します。Jetbrains MPSはプロジェクションベースなので、言語設計者の自由度が高く、言語の組み合わせも可能です。 * tもしっかりサポートしています。欠点は学習曲線かもしれません。 これらのツールのどれも、コードジェネレータのターゲット言語として厳密にJavaに焦点を当てていません。 XtextはプレーンテキストのXpandテンプレートを使用します。私はSpoofaxのコード生成がどのように機能するのか本当に分かりません。 MPSには基本言語があり、Javaのサブセットと言われていますが、さまざまな選択肢があります。 私はXtextをシンプルさと成熟度のために個人的に使用していますが、その設計によって与えられた強い制限は、将来の証明の選択肢にはなりません。

+2

ありがとう、それは私が探していた比較のようなものです。私は質問をしてからSpoofaxの道をもう少し遠ざかりました。コード生成の部分はかなり説得力があります:あなたのASTを操作して変換するための強力な関数言語を提供します。少なくとも私のプロジェクトでは、他のツールのコミュニティ/サポート。 – josh

7

2週間前に同じケースでXTextを選択しましたが、私はSpoofaxについて何も知らないです。 私の最初の印象 - Xtextは非常に簡単で生産的です。 私は30分で私の最初の現実的な(しかし非常に単純な)プロジェクトを作った、私はgraphvizドットグラフとHTMLレポートを生成した。 プレーンテキストの送信元と送信先のファイルが好きなのでMPSが嫌いです。

1

私は「のXtextで数日間実験およびツールは、私が最終的にEclipseの生態系と1だけで何を解決するために通過しなければならない痛みとの緊密な統合により延期された有望に見えるしながら、VEのあなたが実装したコードジェネレータのヘッドレスな実行が可能です。細部のいくつかについてはhereを参照してください(そして、Xtextウェブサイトでは正しく文書化されていませんが、ブログでは、次のリリースで非常にうまく機能しない特別なパッチを意味します)。

この正面に改善が見られたかどうかを半年でもう一度見てみましょう。

2

MarkusVölterの本を見てください。これら3つの技術の非常に包括的な比較を行います。 http://dslbook.org

XTextは非常によく維持されていますが、問題がないことを意味するわけではありません。タイプシステム、スコープ、世代実行の取得は、宣伝されるほど簡単ではありません。

Spoofaxはスキャナレスです(文法構成を簡素化します)。あまり詳しくは書かれていませんが、完成したようです。

MPSは投影です。言語構成と編集のためのプロです。 AST用の複数のエディタをサポートし、すばらしいダイアグラムエディタをすぐにサポートします。基本言語のドキュメントはそれほど良くありません。 Typesystem、スコープ、チェックは非常にうまく処理されます。モデル変換は、ソルバーによって行われます。それを使用している私の同僚は、モデルからテキスト言語に不平を言う。 (私の考えでは、M2Mは直感的ではありませんでした。)

年前MicrosoftはOSLOプロジェクトを持っていました。 MGrammar、特にQuadrantは非常に有望でした。テーブル、フォーム、テキスト、またはダイアグラムビューでモデルを表現することができました。しかし、突然、彼らはプロジェクトをキャンセルした(そしておそらくそれに取り組んで人を撃っ)

3

この種の処理を行うシステムは他にもあります。あなたの目標がツールを構築しているのであれば、統合されたツールを使ってIDEを探す必要はありません。

  • TXL(実用的な、単一のパラダイム)だった
  • Stratego(Spoofax前:時々あなたは

    は、純粋なプログラム変換ツールのいずれかを考えてみましょう、むしろIDEとの統合よりも有用性に焦点を当てている、より良いツールを見つけることができますEclipseに移植)

  • ラスカル(研究、多くの点で非常にきれいに設計されています)
  • DMSソフトウェアリエンジニアリングツールキットは商業的に行われています。 C++でのCluding)

これらはすべて、DSLを定義して変換するための優れたメカニズムを提供します。

本当に重要なのは、「解析後の生命」を実行するためのサポート機構です。

関連する問題