超爆速Java系スクリプト言語として進化したGroovy、その名はGroovyServ

はじめに

前回のエントリでちょっと匂わせた爆速Groovyですが、

githubのWikiにはちょっとだけ書いてありますが、とあるツールを使うとgroovyが爆速になって最高なんですが、それは"あとで書く"。
Mavenリポジトリを検索してPOMとかGrape用形式で出力できるスクリプトを書いてみた - 豆無日記


ついにVer0.1がリリースされましたね!

以前予告編として紹介した、Groovyを常駐サーバ化して、見た目の起動速度を高速化するGroovyServの 0.1版をApache Lisence 2.0に基づくOSSとして公開しました。GroovyServを使う事で、Groovyの起動がRubyPerlのように速くなります。これにより、「JVM上のスクリプト言語は起動が遅いから駄目だ」などという批判を過去のものとする事ができます。
GroovyServを公開しました - Grな日々(uehajの日記)

どのくらい速い?

起動が遅いのはJVM起動とかライブラリのロードとかの定型な準備処理なので、一度起動したプロセスを常駐させてそいつにevalをまかせる的な方法で、その辺をすっとばそうというアレです。
ちょっとずるい感じもしますが、いやマジでめっちゃ速いです。

GroovyServを使うことで、Groovyコマンドの起動時間を短縮し、さくさくと開 発を進めていくことができます。以下は、Windows XP Core(TM) 2 Duo 2GHz の マシンにおけるGroovy 1.7.0の起動時間の参考値です(3回測定した平均値)。
Groovy(非native版) 2.32 (sec)
Groovy(native版) 0.90 (sec)
GroovyServ 0.10 (sec)
http://github.com/kobo/groovyserv/raw/master/README.ja

20倍とかあり得ないです。赤いGroovyどころのさわぎじゃないです。
紫色とかもうチアノーゼでてる感じだと思います。


初回起動時にサーバプロセスを起動するので、そのときはちょっと待たされる感はありますが、それとて今までのJVM起動待ち時間程度。
いったん、GroovyServのサーバプロセスが起動したら、その後は超サクサクモードです。
Rubyとかでスクリプト書いてるのとほとんど体感に差はないです。


あまりに速すぎて

$ groovyclient -e 'println("HOGE")'

でENTER打った瞬間にHOGEが表示される感じ。
いつもの感じで一瞬気を抜くと、な・・・何を言ってるのかわからねーと思うが(ry 状態です。
あまりに嘘くさすぎて、HOGE→FOO→BARとか出力文字を変更して何度か試してしまいました。
確かに毎回変わります。TDDのフェイク的に単に結果のキャッシュだけ返してるとかではありません。

注意事項

さて、そんな爆速GroovyServですが、ちょっと取扱注意なところがあります。


基本的にはあまり制約とかは感じずにgroovyコマンドをaliasで差し替えても問題ないくらいに普通に使えるのですが、100%完璧とまでいきません。


自分が気づいてるところとしては以下になります。

  • ずっと同じサーバプロセスを使っているとPermGenのOutOfMemoryErrorがでます。
    • groovyserver -r でサーバプロセスを再起動すればとりあえずOkです。
    • 前段階として段々と少しずつ遅くなってくるので、気がついた時点で上のコマンドでサーバプロセスを再起動したらいいと思います。
  • Grapeによるライブラリダウンロードが固まってしまうことがあった。
    • つい昨日なので再現性とかまだ追ってません。


他にもなにか地雷があるかもしれません。
もし他に何か変な動きをした!という人がいたら、是非サポートMLまでご連絡を。

そうそう。
GitHubに行くと分かるのですが、実はこのプロダクト、自分も一枚噛んでるのでした。


というわけで、是非是非お試しください。


JVMLL言語ってやっぱり実行速度がアレだよねーという経験をされた方は特に!


Javaの持つフルパワーをサクサクと快適にスクリプトとして実行できる喜びが、
今、あなたのもとへ。


[追記]3/10 1:15

やはりWindows用でcygwin前提というところで引っかかりますよね。
今後cygwinに依存しないようにしていきたいとid:uehajがいってましたので、それまではRubyによるクライアント実装であるgroovyclient.rbでお試しいただければと思います。
よろしくお願いします。