JavaOne2010 9/20 -- Groovy: To Infinity and Beyond

GroovyのPJリーダのGuilliame Laforgeが体調不良でJavaOneに参加できなくなったため、急遽Grails開発メンバのJeff Brownが代役で登壇。


流れとしては↓のような感じ。

  • 過去編:Groovy1.6以前の振り返り
  • 現在編:Groovy1.7で追加された機能
  • 未来編:Groovy1.8で追加予定の機能(現在1.8beta2がリリース済み)


日々、新着情報は追っていたのでJavaOneならではというような新しい情報は全く無し。
復習に始まり、復習に終わったセッションでした。


ただ、よくまとまっているので、Groovy始めたばかりの人にはいい資料なんじゃないですかね。
資料公開が待たれるところです。


1.7では:

  • ネストクラスも書けるようになり、よりJavaコードとの互換性が向上。
  • アノテーションをimport文などJava標準よりも多くの場所に付けられようになった。
  • Grapeの短縮記法に対応した ("groupId:moduleId:1.0"とか)。
  • PowerAssert! assert文がfalseだった場合にものすごくリッチな出力結果が!
  • AST変換のためのDSLを導入/ASTViewerでGUI表示も可能に。
  • Groovy Truth。オブジェクトを真偽値評価したときの結果をコントロールできる。
  • Groovy SQL。バッチ/トランザクション対応。
  • Map#withDefaultや、Map#sortなどの便利メソッドを多数追加 (もちろん、String#trも!)


などなど、地味なんだか強烈なんだかよくわからない粒度の機能が、マイナバージョンアップごとにドシドシ追加されていってます。


1.8の目玉としては、GEP-3(※仕様ID, JSRみたいなモノ)のDSL用のシンタックス拡張が紹介されました。
GEP-3の導入により、ある条件に従ってメソッド呼び出しの括弧が省略できるようになります。
別のセッションでDSLの例として紹介されたように、以下のような実行可能な日本語が記述できるようになったりします。

// ---- 仕込み
Object.metaClass.を = Object.metaClass.の = { clos -> clos.call(delegate) }
まず = { it }
表示する = { println it }
平方根 = { Math.sqrt(it) }

// ---- 実行
まず 100 の 平方根 を 表示する // ==> 10.0

http://d.hatena.ne.jp/uehaj/20100919/1284906117


まとめとしては、

  • Java7を待つ必要はなくて、ほとんどGroovyで実現済みだから使うといいよ
  • Groovyをただの言語としてみるのでは不十分で、Groovyを取り巻くエコシステム全体(たとえば、Grails, Griffon, Gradle, GPars, Spock, Gaelyk, ...)が重要なんだよ

ということでした。


Q&Aでなんとか聞き取れたのは以下ぐらい。

  • Q. テストサポートはどうなってる?
    • A. Spockとか色々あるよ。動的言語ではテストが特に大事。typoも見つかるしね。Grailsではテストサポートが充実してるよ。
  • Q. パフォーマンスはもっと上がらないの?
    • A. 出来ると思うよ。Groovyは動的ディスパッチしまくりだけど、Call Site Cacheとか導入して改善がんばってるし。今後もがんばるよ。


以上でした。