GBenchの足跡を振り返る

こんにちは、@nagai_masato です。G* advent calendar 2013 の 17日目を担当します。16日目は Nobuhiro Sue/@nobsue さんによるAntのGroovyタスクを使うときの俺流ベストプラクティスでした。

実は去年も17日目を担当し、Multiple Dispatch in Modern JVM Languages と題して会社のエンジニアブログでかっちりした記事を書きましたが、今年は個人ブログからちょっと軽めに、ということでオーナーをしている GBench プロジェクトの歴史を振り返ってみようと思います(間に合わなかったので差し替えたとも言いますが)。ちなみに会社は辞めてません。

Groovy のベンチマークモジュール、GBench の開発は 2011 年に始まりました。最初は実行時間を計るたった1つのアノテーションでした。確か当時 Groovy 1.8 が出て多くの AST Transformation が追加されたのに触発されデモ程度に作ってみたものだったと思います。この頃は Sourceforge だったんですね。懐かしい。

f:id:masatonagai:20131217230555p:plain

謎のキャラ発見。

その後ベンチマーク用ビルダーを追加して GBench という名になりました。これもきっかけはビルダーシンタックスのデモを書こうとしたのだったと思います。まだ簡単な計測ボイラープレートコードを省けるちょっとしたものでした。

あ、v0.2 のリリース記事GroovyServ 作者の Yasuharu Nakano/@nobeans さん発見。

2012年、正しいGroovyベンチマークという投稿とともに、v0.3 をリリースしました。ここでビルダがマイクロベンチマーク用に大きく変貌しました。と同時に Groovy の公式モジュールに。

f:id:masatonagai:20131217233425p:plain

そして現在、GBench はプロファイリングモジュールのGProfとともにGPerfUtilsを構成するツールとして、ありがたいことに多くの人に使ってもらっています。つい最近も Groovyの中核コミッタとして御馴染み Cedric Champeauが記事にしてくれました。こういう後押しのおかげで生来飽きっぽい性格にも関わらず開発を継続できています。

f:id:masatonagai:20131027043258g:plain

あ、このロゴも自分で描いたんですよ。ではでは。

GBench と GProf のコード例いろいろ

Groovy 用ベンチマークツール GBench、プロファイラ GProf 、それぞれコード例がレポジトリに入ってるんですがプロジェクトサイトに導線無かったですし(さっき足した)、気づいてない人結構いたんじゃなかろうかと思い共有しておきます。ドキュメントもっと充実させろよという声があるとかないとか。

GBench: https://github.com/gperfutils/gbench/tree/master/src/demo

GProf: https://github.com/gperfutils/gprof/tree/master/src/demo

f:id:masatonagai:20131027043258g:plain

Groovy 2.2 で強化された groovysh

先日 beta 2 がでた Groovy 2.2 で groovysh (REPL) が強化されているので触れておきます。最近型検査とかかっちりした部分の強化が目立っている Groovy ですが、本来高速に開発できるところが売りな言語なんでこれは良い傾向です。たまたまという噂もありますが。

コード補完がまともになった

Thibault Kruse という方が groovysh の使えなさに憤慨して一気に直してくれました。Groovy はじめたばかりらしいんですが。ありがたい。

パッケージ/クラス名を補完しようとしてこんな悲しいエラーをはいていたのも

groovy:000> new groovy.json.ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException:
startup failed:
groovysh_evaluate: 1: unexpected token:  @ line 1, column 16.
   new groovy.json
                  ^

1 error

ちゃんと補完候補をだしてくれます

groovy:000> import groovy.json.
DateFormatThreadLocal    JsonBuilder              JsonDelegate             JsonException            JsonLexer                JsonOutput               JsonSlurper              JsonToken
JsonTokenType            StreamingJsonBuilder     StreamingJsonDelegate    StringEscapeUtils        *

メソッド補完もこのとおり

groovy:000> Math.m
max(         metaClass(   min(

APIドキュメントを参照できるようになった

コマンドに "doc" が追加されています。これは僕が実装しましたClojure の REPL にある doc / javadoc コマンドが便利だったもんで。

groovy:000> help doc

usage: doc [<class>]

Opens a browser window displaying the doc for the argument.

Groovy の場合 Groovy APIJava 拡張 (GDK) APIJava API の3種類のドキュメントを参照する必要がるのですが、それら全てに対応しています。例えば拡張が入っている java.util.List の場合

groovy:000> doc java.util.List

と打つと GDK と Java 両方のドキュメントのURLを出力しつつ

groovy:000> doc java.util.List
http://docs.oracle.com/javase/1.7.0/docs/api/java/util/List.html
http://groovy.codehaus.org/groovy-jdk/java/util/List.html

ブラウザで それらを開きます。

ブラウザは GROOVYSH_BROWSER 環境変数 、BROWSER 環境変数、デフォルトブラウザの順で決まります。例えば Mac OS X だと

export GROOVYSH_BROWSER="open -a firefox"

としておけば、デフォルトブラウザの代わりに Firefox が使われます。

前述した補完の修正をこのコマンドにも取り入れてあるので補完もちゃんとききます。良いタイミングでした。

はてなブログに引っ越しました

いまさら。

というのも、日本語でもちゃんと発信していこうと決めたので、そのついでというか決意の表れというか。これまでも書いていたんですが英語版に比べてほとんど更新してませんでした。最初はしていたんですけど日本からのページビューが日本語版より英語版の方に対して多いのがわかってから面倒くさくなってあんまり書かなくなっちゃったんですよね。いくらマイナー言語のことばっか書いてるからってあんまりじゃないですか、そんなの。でもやっぱり日本のエンジニアに発信するには日本語じゃないとなぁと。英語ってだけではじかれちゃうのは不本意なので。

ただ英語で書いた文章を日本語で書き直すのって自分でも面白くないから続かないので、内容は変えます。きっと。