- 221 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:10:55 ]
- C++は、言語拡張にとても慎重だ。
ライブラリでカバーできることはライブラリでやる、という哲学がある。 C#は、割とホイホイ言語機能を拡張する。 もちろん、開発しているのが事実上Microsoftだけだから可能という要素もある。 「yieldステートメントは、匿名メソッドまたはラムダ式の内部では使用できません」というエラーがでている。 どうしてダメなんだろうか。 それはきっと、yieldはプログラマの知らないうちに匿名クラスを作っていて云々とか、そういうよくわからない理由があるのかもしれない。 直感的には、使えてもいい文脈だと思う。が、処理系の実装上、ダメ。そういうのは汚い。 言語拡張が悪いことだとは言わない。 けれど、一見できても良さそうなことが、こっちの場合にはOKだけどこっちの場合にはダメとか、 いわゆる忌み嫌われる「場合分け」が多くなってきてるんじゃないかと思う。 switch文で幾度も分岐しているような感じがする。 そんなのはコンパイラを作る人も大変でしょう。 C++はD&Eなんかで、「どうしてそういう設計になっているのか」が説明されている。 「The D&E C#」が是非とも読んでみたい。DとEにF(Future)もつけてくれるといいな。
|

|