読者です 読者をやめる 読者になる 読者になる

MVEL2.0 Final リリースされたから使ってみました

Java T2Framework

NBAが知らないうちに開幕されていて度肝抜かれてないでしょうか。
Lakersいきなり強すぎですね。Lakersについて言及すると小林さんに怒られますが、呪いを今年は払拭したいです。


さて、MVEL2.0 Finalがリリースされました。


次期バージョンのMVELは、幅広いスクリプト能力、パフォーマンス向上、静的型チェックの便宜性が加わったことで前バージョンから大きく向上したようです。
今回のバージョンではパーサーとランタイムのオーバーヘッド削減に重点が置かれています。
幾つかのMVELの動作ベンチマークこちらから確認出来ます。

JUEL、Groovy、OGNL、JEXL、MVELでのベンチマーク


新機能(抜粋)

エラー情報の改善
  • 行、カラムの情報を含んだ明解なエラーメッセージ出力
新しいスクリプト言語機能。
  • closuresによる関数定義
  • lambda式
  • 標準的なループ(for,while,do-while,do-until,etc)
  • nullセーフなナビゲーションオペレータ
  • インラインのコンテキストオペレータ
  • 変数の存在チェック(isdef)オペレータ等の導入
高速化されたテンプレートエンジン
  • インラインテンプレート定義
  • マクロ定義
  • カスタムタグ定義を含む
新しい対話式シェル
  • MVELSH

新機能の動作サンプル

closure
  • closure.mvel
// simple function
def echo() { System.out.println("Hello!"); }

// call
echo();

// define a function that accepts a parameter    
def test(arg_func) { 
  ret = arg_func();
  System.out.println("ret:" + ret);
}

test(def { 1 + 2; });
0
MVEL.evalFile(new File("samples/closure.mvel"));
  • 実行結果
Hello!
ret:3
0
lambda Expressions
  • lambda.mvel
fib = def (x) { 
  return (x == 0 || x == 1) ? x : fib(x - 1) + fib(x - 2);
};
fib(10);
  • 実行結果
55
MVEL shell
  • 起動コマンド
java -jar mvel2-2.0.jar

起動して、実行出来ます。



今のところ、mvelファイルを使用する際に日本語が使用できないのでパッチを作ってみました。
MLで聞いたらすぐ返事あったので、近々アップします。
T2frameworkでも最新版を使用しています。

追記

Mikeがとても素敵なコミッタで、日本語パッチを即MVEL本体に取り込んでくれました。
外人とメールでやり取りするのは、苦手ですがOSSはこういうつながりが出来るのが素晴らしいですね。
http://jira.codehaus.org/browse/MVEL-117
これで、エンコード指定してMVELファイルを利用できます。

usage
ParseTools.loadFromFile(new File("samples.mvel"), "Windows-31j");
MVEL.evalFile(new File("samples.mvel"), "UTF-8");

手軽に試せるMVELを使ってみてはいかがでしょうか?