C++0xをまともに解説できる日本人はいるのだろうか。理解できる日本人なら腐るほどいるとしても、日本語として解説して、一冊の教科書を書き上げるほどの人間は、しばらくは出てこないだろうと思われる。そうしてみれば、結局規格を直接読んで学ぶしかないのだが、さて。
http://pc11.2ch.net/test/read.cgi/tech/1214407525/449-
449 名前:デフォルトの名無しさん[sage] 投稿日:2008/09/13(土) 03:14:42
まあ、新しい関数宣言は人のソース読むときには知っとかなきゃならんな…
こんなんだよな
[]main(int argc, char *argv[]) -> int{return 0;}
きめえwwwwwwwwww
自分では絶対に書かない
やれやれ、現時点でn2541すらまともに読もうとする人間がいないのだから、C++0xがまともに学ばれることはないだろう。
現在のドラフトでは、正しくは以下のとおり
auto main(int argc, char *argv[]) -> int { return 0; }
十四時間たった後も、いまだに訂正するものが現れない。要するにだれもペーパーを読んでないということだ。C++0xの将来は暗い。ん、俺? いやISPがちょうど2chから規制食らっているし。
ちなみに目的としては、すでにlambdaに似たような構文があるのと、もうひとつ重要なことに、次のコードが通ること
template < typename X, typename Y >
auto f( X x, Y x ) -> decltype(x + y) ;
これを既存の関数宣言の文法でやろうとしたら、次のようになるはず(こんな糞コードまともに書ける自身が無い)。
template < typename X, typename Y >
decltype( *static_cast<X*>(nullptr) + *static_cast<Y*>(nullptr) )
f(X x, Y y) ;
何故かと言うと、まだxやyといった識別子は定義されていないため。そこでNULLポインタをキャストして参照して使う必要がある。decltypeは、式が評価された場合の型であるので、nullptrでもかまわない。識別子の特定を、関数宣言全体をパースするまで遅らす? それはないだろう。
追記:n2582について(やべ、不勉強で知らなかったorz)
n2582は、n2541を置き換える提案で、そのタイトルの通り、Unified Function Syntaxを規格に入れようというものです。その場合は、autoではなく、[]になります。したがって、449のコードは正しい。この規格はさらに、ローカル関数や名前付きlabmda関数を定義できます。
入ったら面白そうなんだけど。時間的に厳しいんじゃないのかなぁ。n2541がすでにドラフト規格に入っている上で、さらにこれを変えるとか、どうなるんだろう。でも面白そうな機能だよね。
追記2:n2705のNew work for Evolutionについて
このへんスルーしてたけど、いま見たら面白そうなものばかり。なんだか、C++0xは一生かかっても決まりそうにない雰囲気。規格が決まっても、五年後に問題噴出なんだろうな。
追記3:
よくみたら、過去に言及してる。忘れていたとは面目ない。
追記4:新しい予約語を導入すること
もうこの段階では、確実に無理。それに、lambda-captureは必要だし。
もうラムダもコンセプトもいらない気がしてきました
ReplyDelete自分的にはどうもC99の二の舞になるような
ReplyDelete予感がします。
>もうラムダもコンセプトもいらない気がしてきました
ReplyDeleteいえいえ、必須です。
>自分的にはどうもC99の二の舞になるような予感がします。
それは危惧すべきことです。
たぶん、まともな日本語の参考書は出ないだろうし。
N2582は、ラムダ式の構文を知っていれば全く不自然には思いませんねぇ。
ReplyDeleteタイトル通り「(ラムダ式と)統一された関数宣言構文」ですしね。
# 2chでの「autoいいよ~」「0xは16進だよ」という流れはもう飽きた
何事もconsistencyが一番ですからね。
ReplyDeleteすべてのプログラマに、提案のペーパーやドラフト、言語自体の規格を読んでおけというのは酷だと思うのです。
だから大多数のプログラマのもっぱらの関心は、いつ規格が出て、日本語の参考書が出版されるかということです。
だからよく盛り上がる話題は、簡単に理解できるautoとか、間接的に規格制定の時期を話す、0xネタなんでしょう。