Scala の Macro を使って、コンパイル時にフィボナッチ数を計算してみた

つい数日前にでた、 Scala2.10.0-M2 から、( コンパイルオプションが必要ですが) macro が入っているので、使ってみました!

もう、タイトルのままで、とにかくソース見てもらえば(ry

https://github.com/xuwei-k/compile-time-fibonacci

macro については、他にも試している人*1がいたので、参考にさせて頂きました
https://github.com/retronym/macrocosm/

ちなみにScala2.10.0-M2をsbtでやろうとするとめんどくさいことになるので、 実行したい人はこれ 読んでください。README に貼りつけた sbt のログを見てもらえばわかると思いますが、完全にコンパイル時に計算していて、実行時には時間かかってません!(`・ω・´)キリッ

macro の理解が足りなくて、冗長になっていたりとか、これだけだと(フィボナッチを単に計算するという)まったく汎用的でも実用的でもない感じ*2ですが、これで、"コンパイルタイム計算が有名な、某Dがつく言語" とかにも張り合えるようになるんでしょうか!? |ω・`)

まぁあとそもそもコンパイル時計算だけがマクロの利用方法ではないと思うので、みんなもっと色々試しましょう!

*1:Scalazのコミッターだったりする、かなり有名な人です

*2:最初本当は、もっと汎用的になるように、マクロの利用側で渡したtreeをコンパイル時にevalして返す的なことをちょっとやろうとしたけれど、めんどくさくなって諦めた・・・