JavaOne Tokyo 2012でマサカリを膝に受けてきた

この4/4-4/5に日本で7年ぶりに開催されたJavaOne Tokyo 2012のBOFで登壇させていただきました。

JVM言語BOFというセッションで、名前だけ見るとなんだかよくわかりませんが、セッション概要をみると

JavaVM上で動作するさまざまなプログラミング言語 (Groovy、JRubyScalaなど) のコミュニティや興味を持つ個人が集まって、各言語のチュートリアルや最新情報、使用実績などの情報交換を行います。プレゼンテーション、各言語を使ったコーディング大会、ライトニング・トークなどの形式で、ユーザ間の交流を促すBoFとして開催し、言語を超えて活用が進むJavaVMの日本ユーザの裾野を広げます。飛び入り参加大歓迎、楽しい時間にしたいと思います。
http://www.oracle.co.jp/javaone/2012/timetable/index.html

という感じ。

要はGroovy, JRuby, Scalaの代表者が集まって

  • 各言語の特徴アピール
  • コーディング大会:
    • 3つのお題に対する各言語での実装コードの特徴アピール
    • DISりあいパネル
  • LT

ということをやりましょう、というセッションです。
トータル2時間15分の2コマぶち抜きのロングセッションです。


ポイントとしては、各言語に対する応援やtsudaり、disりも含めてハッシュタグを使ってリアルタイム集計を行い、最終的にどの言語が一番人気かを決定する、というところですね。disりdisりもlikeの内、ということでdisだろうと+1ポイント扱いです。


で、自分はGroovyのコーディング大会担当でした。

各言語の実装は↓にまとめられてます。
https://github.com/nahi/javaone2012-benchmark/blob/master/Implementations.md

Groovyの実装コードはこちら↓。
https://github.com/nobeans/javaone-tokyo-2012-jvm-bof

JRubyの@nahiさん曰く「みなさんおなじみの赤黒木」を使ったベンチマークとか個人的にアルゴリズムものが苦手な自分としてはすごく実装が大変だったし*1ベンチマーク取得のためにGradleタスクで実行したんですけどタスク実行に1分とかかかってて「ベンチのお題で1分とか絶対負けるよなーgkbr」とか思ってたら、@nagai_masatoさん作のベンチマークツールGBenchが良かれと思ってやってくれる素敵なウォームアップが遅いだけで実際の性能値としてはGroovy++の反則的な静的コンパイル技術によってピュアJavaに匹敵する結果をたたき出していた!とか、なかなかドラマチックな時間を過ごすことができました。

実際のベンチマーク結果はこんな感じ
f:id:nobeans:20120406153434p:image

Groovy++(紫の棒)、反則的にすごい!!一番左のピュアJava実装(青の棒)とほとんど同じ性能です。
でもノーマルGroovy(緑の棒)だって他の言語の実装からみて「たかだか2倍」ぐらいなので、事前に恐れていたほど遅くはないですよ(キリッ
それに今まさにGroovyでのinvoke dynamic(=indy)対応が進められてますし*2 *3Groovy++相当の静的コンパイル系の機能がGroovy2.0系で取り込まれる方向なので、動的言語だといっても性能的なハンデはどんどん埋まっていくんじゃないですかね*4。少なくともベースとしてJRubyと同じくらいの性能は出せるはず、出したい、出ると良いな。


当日の発表も、すごくタイトな時間(1つのお題辺り1人3分)でうまいこと説明できるのか!とか、モヒカンにメッタ斬りにされて再起不能になるんじゃないかとか色々不安でしたが、一応無事に生還できましたし、うまいこといったようで盛り上がっていただけて良かったです。何よりやってる本人が超楽しかったです。

雰囲気はid:orangecloverさんがトゥギゃってくれたJavaOne Tokyo 2012 JVM言語BoF #jt12_b101 - Togetterを見ていただけるとだいたい察していただけるかと。


ツイッター投票結果は、Oracleさん一押しのJavaFXのGroovyラッパ的なアレであるGroovyFXを用いて実装されたid:kiy0takaのバルスカウンタ改によって無駄にかっこよく発表されましたが、もちろんGroovyが優勝を勝ち取りました! うろ覚えですが確かGroovyが200台前半、Scalaがそれよりちょっと少なくて200弱、JRubyは(ry だったと思います。 KinkとJavaも集計対象に入れておいたらどうなっていたか興味深いですね。


あと、JavaOneTokyo全体の感想としては、一言で言えば超楽しかったです。去年と一昨年にSFのJavaOneに参加してきたんですが、今回タワーホールとかでセッション開始待ちしてるときの雰囲気とか音楽とかもう去年のSFのJavaOneそのもので、すっごいテンションあがりました。もうそのままSFにいるみたいな気分。


というわけで、大変楽しい時間を過ごさせていただき、てらださんを始めOracleのみなさん、JGGUGのみなさん、各言語の方々、各登壇者の方々、各コミュニティのみなさま、そして何よりBOFを聞きに来てくださったみなさま、どうもありがとうございました。


で、今日なぜか左膝が痛んでるんだぜ...

*1:TDDで実装したんだけど、そもそもアルゴリズムの理解が追いついてなくて、デキた!(ドヤッ→期待値が間違ってた→修正みたいなループを何度かやった。

*2:ちなみにJRubyはindy対応がかなり進んでて、今回のベンチ結果はindyの恩恵をかなり受けてます。のはず。

*3:Groovyは3/30付けでindyブランチがmasterにマージされてました!まだ色々と調整中のようですが

*4:厳密には静的コンパイル対象部分のGroovyコードでは動的な機能は使えないので動的言語と言って良いか微妙ですけど