JetBrains メタ プログラミング システムの経験がある人はいますか? MPS は、たとえば Ruby で DSL を開発するよりも優れているのでしょうか?
5 に答える
私は MPS について個人的な経験はありませんが、Markus Völter との Herding Codeの最近のエピソードで言及されました。これが私の理解です。MPS はプロジェクション エディターです。つまり、テキストを解析して編集する代わりに、下線を引く言語データ構造を直接編集します。Markus が言及しているように、MPS では独自の言語を定義できますが、新しい言語の概念を既存の言語に導入することもできます。たとえば、Java に新しいキーワードを数分で追加できます。MPS は、内部 DSL と外部 DSL の間の境界線をあいまいにし、これにより、Ruby のような動的言語で DSL を開発する場合には得られない静的型付けとツール サポートを取得します。
JetBrains で働いています。私は数年間 MPS プロジェクトを率いていましたが、現在は、同じく完全に MPS で書かれた別のプロジェクトに取り組んでいます。私の経験によると、MPS は使用する価値があります :-)
あなたの質問への答えは、多くのことに依存します。Ruby ベースのシステムを使用している場合、またはすぐに言語を作成したい場合は、Ruby ベースの内部 DSL が最適な選択かもしれません。Java を生成する必要があり、MPS を学習する時間がある場合は、MPS が最適なケースかもしれません。また、Ruby ベースの DSL と MPS の中間に位置する XText などのシステムを検討することもできます。
MPS は興味深い獣であり、非常に大きな可能性を秘めています。アイデアは単に素晴らしいです:
- IDE (MPS) 内で、ユーザーは自分の DSL を多かれ少なかれ視覚的に定義します。
- IDE では、言語自体 (ランタイムまたはそれが行うこと) だけでなく、「ツール」とも呼ばれる多かれ少なかれ本格的な IDE を生成できます。これは、彼または他のユーザーがその新しい言語を編集するために使用できます。
そうは言っても、残念なことに、少なくとも実際に利用可能な MPS バージョンについては、Jetbrains は (少なくとも私にとっては) 上記を提供できませんでした。使いやすい IntelliJ。- ユーザーが何か有用なことを行う前に学ぶ必要がある概念と「方法」が多すぎます。- IDE は IDE を生成しませんが、MPS 内の何か、「セルベースのエディター」のみ (このバージョンの時点) のみを生成します。
私は MPS を何度か試しましたが (コンセプトがとても素晴らしく有望であるため)、残念ながら現時点では何か役に立つことはできませんでした。私は MPS については馬鹿げているかもしれませんが、MPS の基本を理解している間に、完全に機能した使用可能な Groovy ベースの DSL を提供することができました。
私はまだ MPS の進化を追っています。素晴らしいアイデアなので、いつの日か最初に約束したことが実現することを願っています。
一般的な Lisp オブジェクト システムのマクロ CLOS は、構文を大幅に変更できます。MPS は ANTLR にかなり似ていますが、グラフィカル エディターが付属しています。ただし、MPS はコンパイルとランタイムを超えたコードの断片化を認識しないため、MPS と ANTLR の両方が静的メタプログラミングの問題に巻き込まれます。Monadics のように、任意の数のサブコンストラクト引数を受け入れるコンストラクトを作成することはまだできません。任意の数のフィルターとリスト ジェネレーターを使用するリスト内包表記ビルダー。これを可能にするには、生の AST をプログラムで変更する必要があります。より経験豊富な Lispers は、おそらく実行できない他の変換を指摘することができます。