Scala の macro で gensym ?

以前(といっても10ヶ月くらいまえですが)

と言いましたが、freshという名前のメソッドで、存在するみたい(?)です。これ見て気が付きました*1
https://github.com/non/spire/pull/43

Gensym*2とは、ある程度Lispとかやってる人にはお馴染みだと思いますが、uniqueな名前を自動的に生成してくれるというものです。*3

水島さんの3ヶ月くらい前のスライドでも言及されてましたが
http://www.slideshare.net/kmizushima/scala-macros-makes-it-easy-to-provide-useful-libraries/8

適当に試したら、現状2.10.0の実装では $1$ 、 $2$ という名前が順番に生成されてました・・・。*4
ところで、Scalaのmacroあまりまだ詳しくないので、「これはGensymじゃないよ!」とか、もっと色々詳しく説明出来る人がいたらお願いします。

ちなみに、リンク先のコメントに書いてありますが、2.10.1からfreshが非推奨になって、freshNameという名前になるそうです。まだexperimentalなので、しかたがないですが、macroやreflectionまわりは他にもこういう変更まだまだ多いです。

もう少し、試したり調べたりして、何かわかればあとで書きます。

*1:ところで、このspireというプロジェクト、マクロ使ってて、かつ実用的にも面白そうなので、是非みんなソース読みましょう

*2:generated symbolの略?でいいの?

*3:他とぶつからないように、人間が気をつけて変数名考えるのめんどくさいですよね

*4:まぁこれで問題ないのかもしれませんが、随分と単純な実装ですね・・・