Eclipse.org 製の新言語? Xtend


Xtendとは

Eclipse Xtext プロジェクトで開発されている新しい言語?
Eclipse Xtext は DSL の開発を容易にするための各種のプラットフォームを提供しており、Xtext に 簡素な DSL の文法記述を与えるだけで、文字通り数クリックで、Eclipse によるコンテント・アシスト、シンタクス・ハイライト、アウトライン・ビューを備えた エディタやコードジェネレータが作成できます。これらの機能を利用して作られているのが Xtend です。
http://www.eclipse.org/Xtext/xtend/#


Xtendの特徴は

xtend は、Java仮想マシン上で実行される静的型付けのプログラミング言語です。まぁ、簡素な文法で書けるJavaです。イメージとしてはGroovyとScalaの間に位置する感じでしょうか。

  • 高度な型推論
  • Javaジェネリクスのフルサポート
  • クロージャがある
  • 演算子オーバーロードが可能
  • 暗黙のキャストと型に基づいた強力なスイッチ式
  • 全てが式
  • テンプレート式
  • 拡張メソッド
  • 簡素なプロパティアクセス
  • 別名ポリモーフィックなメソッド呼び出し
  • Javaコードへの変換

そして一番のポイントは、Eclipseによる強力なIDE環境が提供される点です。


Xtendのインストール

Eclipse の更新サイトからインストールするだけです。
http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/


新規プロジェクトの作成でチュートリアルが見れます。


チュートリアルは以下のような感じになっています。
コンパイルエラーが出ていたら、プロジェクトのクリーンを実施。


xtend-genフォルダ内に、生成されたプレーンなJavaファイルが出来ます。
チュートリアルの冒頭を見てみると、こんな簡易のコードがあります。

class Xtend01_HelloWorld extends TestCase {
  def void testHelloWorld() {
    Assert::assertEquals('Hello Joe!', sayHelloTo('Joe'))
  }

そして xtend-gen フォルダ内には xtend コードから作成された Java コードがあり、該当箇所は、以下のように生成されています。

@SuppressWarnings("all")
public class Xtend01_HelloWorld extends TestCase {
  public void testHelloWorld() {
    String _sayHelloTo = this.sayHelloTo("Joe");
    Assert.assertEquals("Hello Joe!", _sayHelloTo);
  }

つまり、xtend は Java コード生成のための DSL な訳です。と、まぁ昔からよくあるツールと言えばそれまでですが、Xtext を最大限に利用した Eclipse とのシームレスな結合により、強力な IDE サポートが得られる点がアドバンテージであり、DSL をプログラム言語と呼べるまで上手く昇華させています。


さて、文法編は次回、