私はC++が大嫌いだという件

なんかアクセス多いなと思ったら、昨日の記事をtwitterで言及してくれている人がいた。(→ http://twitter.com/cpp_akira/status/5997348630 )


誰かと思ったら、Faith and Braveの中の人だった。この人は、C++標準化委員会の人だ。そう言えば7年ぐらい前は私はC++ templateに夢中になっており、C++標準化委員会の委員をすごくやりたかったのを覚えている。


当時、私はC++のtemplateを駆使した画像処理ライブラリを書いたり、boost自体のソースを読んだりするのが好きだった。C#が出てきてからというもの、自分が関わっていたビジネスアプリの開発はすべてC#へ移行し、C#でいいやと思うようになった。C#の言語仕様は全く洗練されてはいなかったが、Visual C#の生産性の高さは目を見張るものがあった。


私はC#を使うようになってから、めっきりC++でプログラムを書くこともなくなり、"template"と文字列をタイプすることすら体が拒絶するようになった。あれは魔界への扉を開くための呪文だ。そこを訪れた人間は、二度と生還することは出来ない。


コンピュータ将棋の開発に必要なのは決して"template"ではない。YaneLisp(→ http://labs.yaneu.com/20090905/ )のようなマクロプロセッサだ。


あるいは、CやPASCALの入門書にもあるような基本的な制御構文や代入文と、先手用と後手用のコードをひとまとめにして生成するための仕組みだ。あとは主にbitboardに関する操作子(例えばforeach_bitboard → http://d.hatena.ne.jp/LS3600/20091106 )や、coroutine(将棋プログラムに何故coroutineが必要なのか → http://d.hatena.ne.jp/LS3600/20091120 )のための記法だ。それ以上のものは何ひとついらない。


ともかく、もうC++の醜悪な構文を見るのも心底堪えかねるものがあったので、コンピュータ将棋自体もC#で書きたいのだが、私にはaki.さん(→ http://d.hatena.ne.jp/ak11/ )ほどのC#への思い入れや愛情や熱意は無く、C#の産みの親であるAnders Hejlsbergと握手までしておいて言うのも何だが、C#の最適化の甘さには心底目を背けたくなるものがある。(言うまでもなく最適化が甘いのはC#の言語自体の問題ではなく、MS製のC#コンパイラJITの問題なのだが。)


仕方ないので、もう少しpureな言語をいまから作って、それを使ってコンピュータ将棋を実装しようと思う。あまり時間が確保できないというのにいまからこんなことしていて来年のコンピュータ将棋の大会に間に合うかというとたぶん間に合わないんだろうけど、C++で書くぐらいなら舌を噛んで死んだほうがマシだと思うぐらい使いたくないんだから仕方がない。


私の大会での活躍を期待してくださっている皆様には申し訳ないが、かくのごとく私は心の病気私の美学というものがあり、意地でもそれを貫き通したいと思っている。