なぜか話す機会があったので

こちらにも書こうと思う。なぜ私がC++を「世紀末糞言語」と呼ぶか。それは設計者の意図に反してユーザーが開拓してしまったテンプレートメタプログラミング(TMP)によるところが大きい。なんというか自分の感覚を文章にするのが難しいというか、そういうのって実際よく分かってないんじゃないかとも思う。情けないが、Programmers' Grimoireの「C++の歴史」の一部を引用する。

1994年のことであった。標準化委員会の会議中に、Erwin Unruhなる者が、ある、興味深いコードを示した。そのコードは、コンパイル時に、テンプレートのインスタンス化を用いて、素数を計算するというものであった。これが、記録に残る初めての、テンプレートを用いた、メタプログラムのコードであった。
しかし、Erwin Unruhの本来の意図は、メタプログラミングの可能性を示すものではなかった。彼は、テンプレートを用いて、コンパイル時に計算するようなコードが書けることを、危険だと考えていた。それ故、彼は、コンパイル時に素数を計算するコードを示して、以てテンプレートの危険性を周知させようとしていたのであった。
しかし、Bjarneその他の者は、むしろ素晴らしいと、絶賛した。彼は、この意外な反応にひどく驚いたという。

テンプレートメタプログラミングの発見発展を、北斗におけるバスケと重ねて見ているというのが、糞言語の前に世紀末をつける最大の理由であるわけだが、まあ、なんというか、他にも全体が世紀末しているので世紀末なのです。完全に規格に合致したC++コンパイラはこの世に存在しないという事実を挙げれば分かりやすいか。


「どの言語から始めたらいいですか?」
への多少の回答も兼ねて…。
http://www.aoky.net/articles/steve_yegge/tour_de_babel.htm

とは言え、C++コードでいいものを書くことは明らかに可能だ。それはつまり、ほとんどCのコードに、いくらかのC++の機能が、最低限だけうまく使われているような場合だ。しかしそういうことには決してならない。C++はすごい遊び場であり、そのすべてを知るとすごく賢くなった気分になる。だからあなたはそのすべてを使おうとすることになる。しかしそれはうまくやるのが本当に難しいのだ。なぜならC++はそもそもにおいてクズ言語だからだ。たとえあなたが優秀であったとしても、結局は台無しになってしまう。

(これはAmazonで働いていた頃に書かれたもので、今はGoogleにいるようだ)
まさにこれが言いたかった。こうやって文章に書ける人はすごいと思う。Effective C++を読んだのはまずかったのかもしれない。読まないのもまずいが。すべてを知るにはまだまだ遠いが、確かにすごく賢くなった気分になってすべてを使いたくなった。もういい、ここまでだと思ってModern C++ Designとか危なそうなのには手を出していない。多分もっと他にやるべきことがあるのだろう…。
これ、初心者への言語紹介には程遠いな…。これはひどいと言える。ある種の前提知識がないと変な誤解を生む要素満載だ。


http://www.aoky.net/articles/james_iry/brief-incomplete-and-mostly-wrong.htm
これはどうだ?
だめだな。