みぃちゃんの頭の中はおもちゃ箱
略してみちゃばこ。泣いたり笑ったり
 



C++0xについて、少し調べてきました。

うちの会社では、ソフトウェア開発にC++を使っています。プログラミング言語は、当初設計された後も、技術の進歩や時代の変化に合わせて改訂が加えられます。C++も、次世代の仕様としてC++0xが練り上げられています (つい最近、仕様が承認されたようです)。

C++0xをざっと見て思いました。

ますます醜くなったなぁ。

「見にくい」ではありません。見た目が悪くなったという意味の「醜い」です。

C++は、新しい概念を取り込むために、新しい記法を取り入れています。しかし、C++の新しい記法にはCのような美しい整合性がなく、本当に「記号」になってしまっています。

例えば、C++の初期に参照が導入されました。
int &x;
このような記号的な表記が、仕様が改訂されるごとに増え続けています。

Cでは、記法と意味に整合性がありました。例えば、
int *p;
と宣言すれば、pはint型のポインタ (int *型) になります。この宣言において、int *pという記述はint (*p) つまり*pがint型であると読むことができ、型の意味と記述方法が見事に整合していました。一方、C++の参照宣言をint (&x) と読んだところで、&x (xのアドレス) がint型であるとは読めません。&は単なる記号になり下がっています。純粋仮想関数も、もともとの記号の意味とかけ離れています。
virtual int function(int) = 0;


これと似た、単なる記号としての書き方が、C++0xでも新たに導入されています。例えば、ラムダ関数は以下のように定義します。
[ ] (int x, int y) -> int { /* 本体 */ }
関数の定義に [ ] や -> が使われる光景を異様だと感じるのは私だけでしょうか。
[&, z] (int x) { /* 本体 */ }
もう、何でもありの世界です。C++は、いつの間にか つぎはぎだらけになってしまいました。満身創痍 (そうい) で痛々しい限りです。見るに耐えません。

従来の記法と整合する書き方はできないものでしょうか。

C++では ... (ドット3個) で省略を表すことになっていますから、先ほどの例
[ ] (int x, int y) -> int { /* 本体 */ }
の代わりに
int (...) (int x, int y) { /* 本体*/ }
と書けば、関数ポインタ
int (*) (int, int)
とよく似た表記になります。ラムダ導入子 [ ] に変数リストを書く必要がある場合は、予約語usingを使用して、
int (...) (int x, int y) using variable-list { /* 本体*/ }
でいかがでしょう。

私ごときが わめいても仕方ないか。


コメント ( 0 ) | Trackback ( 0 )


« 図解 新エネルギ...
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
規約に同意の上 コメント投稿を行ってください。
※文字化け等の原因になりますので、顔文字の利用はお控えください。
下記数字4桁を入力し、投稿ボタンを押してください。この数字を読み取っていただくことで自動化されたプログラムによる投稿でないことを確認させていただいております。
数字4桁
 
この記事のトラックバック Ping-URL
 


ブログ作成者から承認されるまでトラックバックは反映されません
 
・送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております
・このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております
※ブログ管理者のみ、編集画面で設定の変更が可能です。