えーと…。何だこれ(笑)。さすがC++(笑)。
存在意義を維持したまま、ここまで変態化するもんなのか。まあC++は生まれた時からそういう性格か。Zero-overhead principleとか前面に掲げちゃう言語だしな。
見た目も仕様も色々とキチガイじみてることだけが難点だよなあ(笑)。罠が多くなるのは仕方ないんだろうけど。Cのポインタが難しい、ってのと同質だとは思う。パフォーマンス落とさない為にちょっと分かりにくくなったけど、脳内でアセンブラに置き換えれば別に難解じゃないから構わんだろー、みたいな。Cからの伝統で、どうコンパイルされるかが見えてないと書きにくい言語というか。
あと、動作が軽いものは、それだけで使われるんだよなあ。PHPなんかもそうだと思うけど。
クライアントPCあたりは最近パワーあんまり要らないんじゃね的になりつつあったけど、省電力路線のPCも出てきちゃったし、シングルスレッドのパフォーマンス向上も微妙にきつくなってるし。
ただ、ネイティブでマルチスレッドアプリ書いてると思うけど、もしも「VMの方がうまく勝手に分散してくれるよ」なんてことになるならVM大勝利かもなあ。仮にそうなったら俺どの言語使うんだろ。まあその時に流行ってる奴か(笑)。
ぶっちゃけ現状だと、Windowsで同じアプリの.NET版とネイティブ版とついでにJava版があったら、俺ならネイティブ版使うしな。これが「普通.NET版だろ」ってなったら、俺にとって言語の乗り換え時になるんだろう。いや、俺だけじゃないだろうけど。
で、C++0xだが。
相変わらずの超高級アセンブラマクロ言語なんだけど、より一層の謎言語になっていた。
sort( x.begin(), x.end(), []( const auto& a, const auto& b )->bool { return a.id() < b.id(); } );
みたいな気持ち悪い文が書けそう。こういう気持ち悪いコードは是非書きたい。というか何これ別言語?
autoはこの書き方でもいいのかなあ。前方参照してそうだけど。でもそれ出来ないとautoの存在意義ねーか。
つーかむしろ、
for ( auto& c : x ) { c.chomp(); }
こんなコードの方が早く使ってみたい。これでコンパイル通るかは知らんけど。こんなん見ちゃうと、
for ( int i = 0; i < sizeof(x)/sizeof(x[0]); i++ ) { x[i].chomp(); }
とかもう書きたくねー。sizeofをマクロにしろよとかは置いといてですね。たぶんこれコンパイルしたら同じコードになるよなあ。使いたいなあ。
昔は空気だったのに、やたら派手になって帰ってきたautoも凄いよな。昔と同じ扱いをすると多分怒られるんだろうな。コンパイラに(笑)。
まあ何か他にも色々面白そうでした。リテラルが自分で定義出来るとか何に使うんだ(笑)。constexprとかコンパイルタイム向けの仕様もだいぶ増えてるのはメタプログラミング向けなんだろうか。普通に使う分にも便利そうだけど。