ついに僕は新世界へと降り立つのかもしれない.genericよりももう一歩だけ先に進んだ場所に広がる世界.
"Generative Programming"(asin:0201309777)
これが出たのが2000年か...早く( ゜д゜)ホスィ…でも6000円は高い・・・
そもそも,6000円の価値があるほどの内容なのかぁゃιぃ.
だってそうだろ?少なくともModern C++ Designよりも2年も前に出ているのに,この単語を未だに世間一般で聴いたことがない.
自分が寡聞なだけかもしれないが.
それに経験のない自分から見ても,パッと見て従来のmacro programmingと何が違うの?って突っ込みたくなる.
だが,これまでのmacro programmingの欠点であった
- Lispなどではbyte compileまでしか取り扱えない.
- Cにおけるpreprocessor,あるいはmetaな形でのcode生成(lex+yacc,あるいはscriptなど)においては
- 言語自身の枠内にとどまっておらず,安全性・保守性に乏しい.
- 余計なソースを吐きやすく,効率の面で疑問視される.
という点を,例えばgenerative programmingの機構としてC++でのtemplate meta programmingを想定するならば
- 吐き出されるのはarchitectureのnativeであり
- あくまでC++の枠内にとどまっており,強い型付けなどはやはり維持される
という具合に解決できているのだ.
さらにmacroによる単純文字列置換から,識別子によるソースコードの展開というより高水準なコード生成によりassenbleとの親和性が高くなる.
(templateの中身がC++のコードである必要性がなく,ある一定のsemanticsを持ったinline assembleでも構わないのだ!!)
もちろん,portabilityが必要ならpolicyでassembleとC++のコードを切り替える・・・
もはや,自分の夢見ていた世界そのものである.
architectureモデルも記憶階層モデルもスレッドモデルも,ありとあらゆるものをpolicyの霞の彼方へ消し去ることができる.
さぁ,本当にそうなのだろうか?
私が降り立とうとしている新世界は青く美しく広がる草原なのか,はたまたオアシスの蜃気楼を映し出す不毛な砂嵐の世界なのか?
ついに自分で実践してみるしかないところまで来てしまったことは確かである.