以前。へぼいコンパイラでもちゃんとコンパイルできるように C++ で書く必要があった。そうすると、難しい template を避けるべきだということになる。でも、int 用と double 用と long long 用をいちいち書くのはあまりにも面倒。仕方ないので、自分でしょぼい文法を考え、それを ruby でプリプロセスするようにした。
そんなことをしていて思ったのは。
java や C のような、書いたソースとできあがるコードの間に1対1の関係(とはいわないまでも、それに近い関係)があるような言語で仕事をするときは、積極的に ruby や perl のようなものでプリプロセスする方がいいんじゃないか。ということである。
ruby で C++ のソースを生成するというのは、反則っぽいが、できることがあまりにも多い。普通に書いたらけっこう大変なことも、ruby でソースを生成してもいいということになれば思いがけないほど簡単にできる。
プリプロセッサを駆使してソースを増殖させるのに比べると、デバッグしやすいのも利点である。
C++ template でできることしかやらなかったんだが、C++ template で書いたものと比べると、ずいぶんすっきりした。template 引数に入るものが限定されている場合は、template を書くよりも ruby で生成する方がいいんじゃないかと、かなり本気で思っている。
C++ tepmlate には決してできない、引数の数が違うけど中身は大して違わない関数なんてのも、ruby で生成すればいくらでも作れる。*1
多用するのはちょっとどうかと思ってはいるが。
で。
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3aScheme%a5%d7%a5%ed%a5%b0%a5%e9%a5%de%a4%ce%a5%ec%a5%d9%a5%eb10 の level7 に出てくる、scheme で java を生成する話は、そんな話のもっとすごい奴なのかな?