Javaと同等レベルに高速に実行できるGroovyコードを書く方法が紹介されてます。
Yes, Fibonacci in Groovy can be as fast as Java !
こんなスクリプトです。
@ast.Bytecode int fib(int i) { l0 iload 1 iconst_2 if_icmpge l1 iconst_1 _goto l2 l1 frame SAME aload 0 iload 1 iconst_2 isub invokevirtual '.fib','(I)I' aload 0 iload 1 iconst_1 isub invokevirtual '.fib', '(I)I' iadd l2 frame same1,'I' ireturn } int groovyFib(int i) { i<2?1:groovyFib(i-2)+groovyFib(i-1)} println "Pure Groovy" long sd = System.currentTimeMillis() println groovyFib(40) println "Computed in ${(System.currentTimeMillis()-sd)}ms" println "Bytecode Groovy" sd = System.currentTimeMillis() println fib(40) println "Computed in ${(System.currentTimeMillis()-sd)}ms"
あがが。
あごがはずれるわい。
Groovyで表現されるJava Bytecode DSLですね。
AST変換でバイトコード生成し、実行します。
余談ですが、Groovy 1.8では、プリミティブの演算が相当速くなるようですね〜。たのしみ。