もひとつ

この件、もう少し考えてみて、何が起こっているのかやっと理解できたような気がします。
この話って要するに

  • C#3.0は「型を明示しない静的型付け言語」になりました!

という派閥と、

  • C#も(C++0xと同様に)「場合によっては型の明示を省略できるただの静的型付け言語」のままである!

という派閥の対立なんじゃないでしょうか。
前者から見れば「可能な限りvarを使って何を不自由するの?」ということになるし、後者から見れば「なんで型を書いちゃだめなの?」という話になる。


実際にはどちらも(特に前者)はそこまで過激な主張ではないんでしょうが、もしC#が今後この方向で進化していくなら、いつかそれが当たり前の日が来るかも知れません。ただ後者の立場の人たちに新しいプログラミングスタイルに欠陥や陥穽がないこと/回避する方法を納得させるまでは、しばらくは布教活動を続けることになるんでしょう。ま、最終的にはHeilsbergの腹一つなんでしょうが。


なんにしても当面C#を使う場合は、各開発プロジェクトごとに、上記どちらの視点でvarを捕らえるかをあらかじめ統一させるのが重要でしょうね*1


で、まあ、私は(この記事のタグを見ても明らかに)C++のことしか考えていないので、ここからC++に話を捻じ曲げます。
C++の場合は明らかに後者ですよね。これはvarに相当する予約語がautoであるということでも(地味に)明らかなんじゃないかと思います。
C#の場合、varは「これから(型は知らんけど)変数書きますよ。名前は○○で、値は〜〜」と発想する書き方の中で使うわけですよね。だからvariable/variantのvar。
一方でC++のautoの場合は、「この変数○○の型は右辺から自動的に導出されますよ」と発想する書き方の中で使われる。だから「自動」のauto。
さらにC++は、conceptを導入することでより明確に「不特定多数の型を明確に宣言する方法」を強化する道を選びましたから、そのような明確化と逆行するautoの利用は、あくまでも補助的なものになるのではないかと思います。

C → C++JavaC#という直線状の進化は、ここでついに決定的な分岐を見るのかも知れませんね。

*1:ん、しまった。先日発注したC#製のプログラムはこの辺ぜんぜん決めてないな。