BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

最新のXtextリリースでJVMとの統合が実現

| 作者: Jean-Jacques Dubray フォローする 4 人のフォロワー , 翻訳者 田中 明 フォローする 0 人のフォロワー 投稿日 2011年11月6日. 推定読書時間: 4 分 |

原文(投稿日:2011/11/03)へのリンク

今週(11月第1週) Eclipse Foundation から Xtext 2.1 がリリースされた。 このリリースでは多くの新機能に加え、Java VM をターゲットとした DSL(Domain Specific Languages) 作成支援という大きなイノベーションが含まれている。

これにより、式言語(Expression Language)である Xbase 記述を、作成する言語へ直接そして簡単に埋め込むことができるようになった:

大抵の場合、作成する言語の概念がどう JVM の型システムに対応するかを指定するだけで十分だ。後はフレームワーク(Xtext)側がスコーピングやコード生成機能などといった全てのサービスをこの 対応付けから自動的に導き出す。

Xbase 自体も拡張され:

  • 二番目の暗示的変数となる it の導入。既存の thisと は異なり、例えば関数パラメタとして宣言し再定義できる。
  • 関数呼び出しの最後の引数がクロージャの場合、フィーチャー呼び出しの後で指定することが出来るようになった。こうすることで、 新たなステートメントのような形で拡張ライブラリを提供できる。

Sven Efftinge 氏は JVM 言語を構築するための 五 つのステップからなるチュートリアル を用意した。Xtextの最初から使われているドメイン言語の中の式(expression)とクロスリンクを Java のタイプに対応付けるサポートをどう追加するか示している。また、次を実現する方法についても説明している:

(作成する言語のなかで)Java の Generics やクロージャまでもを含むフルセットの式など、あらゆる種類の先進機能を実現できる。でもあわてる必要はない。それら機能を自分で実装する必要はなく、多 数用 意した有用なインフラストラクチャを利用して言語を構築できるのだ。

Xtext と他の MDE(Model Driven Engineering:モデル駆動エンジニアリング)アプローチとの基本的な違いは次のような点にある。

Xtext にドメイン固有の概念群をどう処理するか伝えるには、ドメイン固有の概念群を何らかの言語に対応付ける必要がある。良くあるのは、コード生成機能やイン タープリタを定義するこ とだが、Xbase を用いた言語であればこのステップを省略し、 IJvmModelInferrer (src)  を利用することが出来る。

考え方としては、定義した言語概念を必要な数のJavaのタイプ (JvmDeclaredType (src) に対応付け出来るということ。こういった型には、Java の class、interface、annotation type または enum などがあり、正当なメンバも含んでいるかもしれない。結局のところ(DSL)言語開発者は Java 言語に基づく正しいモデルを作成する責任を持っているのだ。

言語の概念の Java 要素への対応付けを規定することにより、言語設計者は Xtext に暗黙的に種々の式のスコープやそこからの戻り値の型を伝えることになる。また Xtext 2.1 には式表現を含むこの Java モデルを可読性を備えた Java コードに変換するコード生成機能を備えている。

他の重要な新機能には以下が含まれる:

  • リネームリファクタリング(Rename refactoring)により言語やリソース境界を越え安心して要素や参照の名前を変更できるようになった。
  • 入力支援機能の改善
  • ビルダ性能の向上
  • 新たな実験的テスト支援フレームワークにより DSL ファイル用にパラメタ化した JUnit4 テストを実行できるようになり、また DSL ファイル中に直接コメントを埋め込むことで期待する結果を構成できるようになった。

Xtend にも多数の改善が加えられた:

  • 二番目の暗示的変数となる it の導入。Xbase と同じように、例えば関数パラメタとして宣言し再定義できる。 it を用いることで、クロージャの単独パラメタを省略したり、Create Functions のデフォルト変数とできる。
  • Xtend のプロシジャサポート。クロージャが値を戻さない場合には指定不要。
  • 関数呼び出しの最後の引数がクロージャの場合、フィーチャー呼び出しの後で指定することが出来るようになった。
  • Xtend のクラスのメンバに private, protected, public という設定が出来るようになった。デフォルトの可視性は、クラスとメソッドは従来通りの public で、フィールドについては private 。
  • フィールドが extensions としてインジェクトされたものであればフィールド名を省略できる。
  • Generic タイプや Array でのタイプ推論の改善により、これまでより多くのケースで明示的なタイプ宣言を省略できる。
  • Xtend ファイルの Import 文を JDT にあるような形に構成できる。
  • コード生成機能により Xtend の生成物に含まれるコメントから生成される Java コード側の JavaDoc へと変換できる。
  • リネームリファクタリングは JDT とシームレスに統合出来るよう改善された。

Xtext はわくわくする新機能と共に非常に早いペースで進化を続けており、ひょっとすると Xtext Community もフォローが困難なくらいのペースかもしれない。あなたは Xtext を使っていますか?どんなアプリケーションに?使われている場合、今後どんな方向に Xtext が進化して欲しいと思いますか?

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT