2008-09-13

C++0xは使われるようになるのだろうか

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は必要だし。

5 comments:

rt said...

もうラムダもコンセプトもいらない気がしてきました

Anonymous said...

自分的にはどうもC99の二の舞になるような
予感がします。

江添亮 said...

>もうラムダもコンセプトもいらない気がしてきました
いえいえ、必須です。

>自分的にはどうもC99の二の舞になるような予感がします。
それは危惧すべきことです。
たぶん、まともな日本語の参考書は出ないだろうし。

Anonymous said...

N2582は、ラムダ式の構文を知っていれば全く不自然には思いませんねぇ。
タイトル通り「(ラムダ式と)統一された関数宣言構文」ですしね。

# 2chでの「autoいいよ~」「0xは16進だよ」という流れはもう飽きた

江添亮 said...

何事もconsistencyが一番ですからね。

すべてのプログラマに、提案のペーパーやドラフト、言語自体の規格を読んでおけというのは酷だと思うのです。
だから大多数のプログラマのもっぱらの関心は、いつ規格が出て、日本語の参考書が出版されるかということです。
だからよく盛り上がる話題は、簡単に理解できるautoとか、間接的に規格制定の時期を話す、0xネタなんでしょう。