C++0x and Lambda Expression

戻り値型の位置

新しい関数宣言構文

auto 関数名(引数リスト)->返却型;

これ良いなぁ.
そういえば『C++の設計と進化』でも関数戻り値の型を最後に持ってくるのを検討した話が出てきたような.確か template 導入時に,1-pass で処理したいとかでしたっけ.
結局 C++ では型変数の宣言を戻り値よりも前に書くことでその話はなくなったとかだったと思いますが,そのとき C++ が戻り値の位置を変えていてくれれば C# のこの悲劇はなかったと.

あ、そゆ話か。タイトル見て違うことを想像した。
というのも、戻り値型が可変であるとき、

public T Hoge<T>()

ここで、Hoge<T> と書くまではTが宣言されていないので、public T の時点でインテリセンスが働いて、勝手にTで始まる型に補完されてしまうのが激しくイラつくんです。


2008/01/25 14:25 | シャノン

(追記)

C++の設計と進化』をひっぱりだして読み直してみました.記憶は大体正しかったっぽいです.

最終的に決まったシンタックスでは、index()の宣言は次のようになる。

template<class T> T& index(vector<T>& v, int i) { /* ... */ }

当時私は、関数のリターンタイプを引数リストのあとに書くことを真剣に検討した。
たとえば :

index<class T>(vector<T>& v, int i) return T& { /* ... */ }

または、

index<class T>(vector<T>& v, int i) : T& { /* ... */ }

これらはパーシングの問題を解決するが、テンプレートを分かりやすくするためにはキーワードを好む人が多いので、こんな考えは無駄だった。

C++の設計と進化』を読んでいるとパーサの書きやすさが言語設計時に考慮されたというような話があちこちで出てきます.それを考えれば,IntelliSense が言語設計に影響を及ぼす現代だって別に変ということはなさそうですね.
1-pass IntelliSensing please!

ラムダ式の引数の型の省略

faith_and_brave 2008/03/26 12:04

引数の型の省略は、実装コストが大きいので見送られているそうです

そういえばメソッドチェイン形式の LINQ は大抵毎行にラムダ式が入ってくるのですが,引数の型が省略できるのは横幅的に割と助かってます.改行入れたくなるかどうかのギリギリの戦いだったりして.とはいえこれも一側面.
プログラミング言語では,利用者視点の「こーだよね」と実装者視点の「あーだよね」と理論屋さんの「それだッ!」はどれが欠けてもダメなんでしょう.
その意味では,うちの日記で私が書いている部分のうち,実装者視点ぽく見える話とか理論屋視点ぽくみえる話は基本的に怪しいのでご注意を.実装者視点のお話は MSDN Blog とか先日のデブサミのように中の人の講演がお勧めです.ああいう場なら直接聞けますしね.理論屋さん視点は教科書をしっかり読んでみたり,本当に分かっている人と直接議論してみたりしないとなかなか身につかなそうな気がします.