You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
AST を書くのは大変 Groovy は AST 変換の実装用に AST を生成する DSL を提供しています。ところがこの DSL は複雑で習得が困難です。次のような GString の AST を生成したいとします: "Hi, $name." その場合、DSL はこうなります。こんなもの構文と同じ数覚えられません: gString 'Hi, $name.', { strings { constant 'Hi, ' constant '.' } values { variable 'name' } } ソースコードから直接生成することもできますが、コンパイラによるチェックの恩恵を受けられないですし (これについては Joachim Baumann が説明しています)、DSL よりパフォーマンスが悪いです。次のベンチマークを見てください: @Grab('com.googlecode.gbe
GBenchなどのクールなGroovyツールを開発されている @nagai_masato さんが新たにAstSpecBuilderというのを公開されてますね AstBuilderのbuildFromSpecのためのspecをGroovyコードのASTから生成するというもの。AstBuilderというのは、AST変換のアウトプットとしてのASTを生成するためのもので、その生成はJavaやGroovyでも書けるけどごたごたしてしまうので、buildFromSpecはとあるDSL記法(spec)で生成するための方法です。AST Spec BuilderはこのspecをGroovyコードから生成してやろうというもの*1。単にコードに対応するASTであればbuildFromCodeというGroovyコード断片から生成するのもあるが、加工についての自由度が低いから、いったんspecにしてなんらかの処理
はじめに 息切れ直前企画「プログラミングGroovyの発売日まで1日1エントリ書くぞう」の第4回目です。 今いちネタがないので、先日JGGUG G*WorkshopでGroovy 1.8の新機能について紹介した際の補足として、新規AST変換の1つ@Fieldを解説してみたいと思います。 前ふり: AST変換の分類 Groovy 1.8では「AST変換」が特に強化された機能だと思います。とても多くのAST変換が追加されています。発表では、これらを以下の3つのカテゴリに便宜的にわけてみました*1。 ボイラープレート割り 巨人の肩 言語機能の補修、拡張 「ボイラープレート割り」は、冗長なコードを排して、簡潔にするためのものです。@EqualsAndHashCodeとか@Logとかですね。これは「無くても良いけど知ってると便利」なもの。 「巨人の肩」は、デバッグ済みのコーディングパターンを再利用す
昨日のブログでも言及しましたが、Groovy 1.8.0では、Groovy ConsoleのASTブラウザ([Script]-[Inspect AST]で呼び出す)が進化して、AST変換前後のASTを、Groovyコードとして表示してくれるようになりました。 上は下のコードをInspect ASTしてみたものです。 今まではこのような情報を見るために、groovycしてクラスファイルを生成して、さらにJadなどでJavaコードに逆変換してたものですが、それよりもはるかに見易いです。なぜなら、JavaコードレベルだとCallSite最適化がバリバリなされた後のものなので、メソッド呼びだしが極めて読みにくいものになってしまうからです。 良きかな。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く