- XNA Creators Club FAQ (http://creators.xna.com/en-US/faq#anchor_4_4)
Can I use the new C# 3.0 features with XNA Game Studio 3.0?
The new C# 3.0 language features are fully available for all platforms in the Beta release, with the exception of LINQ Expression Trees, which are available only on Windows. You can’t deploy/run your Xbox 360 game in the Beta, but you can still compile your code for Xbox 360, including for scenarios that use C# 3.0 features.
XNA GS 3.0だとExpression Tree以外のC# 3.0機能は使えるんだと。Expression Treeがよく分かってないのだが、
- C# 3.0 の新機能 (http://ufcpp.net/study/csharp/ap_ver3.html)
にあるものはだいたい使えると思っていいんだよね?
で、もちろん目玉はLINQなのだろうが、
これってゲーム内だとどの辺で使えばいいんだろう。もしLINQ to Objectが十分に速いのであれば、ゲーム内オブジェクトを全部匿名型で扱って、引っ張ってくるときは全部LINQでなんとかする、っていう手抜きもできるんだろうけど、たぶんそんなにパフォーマンスでないよね?
匿名型を使わないにしても、例えば特定の四角の中に存在する敵弾オブジェクトを全部持ってくる、とかいうのをLINQで書いてしまって、はたして360実機上でちゃんとしたスピードで動くのか、っていうところが分からんと使っていいものかどうか分からんなあ。自分で調べろってことか。でもBetaだと360で動かせないんだよね。
- Linq to Objects - measuring performance implications (part 1) (http://codebetter.com/blogs/steve.hebert/archive/2008/02/06/linq-to-objects-relating-data-structure-organization-to-where-clause-optimization.aspx)
Bottom line - despite my best efforts I just couldn't make my hand-written code perform as poorly as Linq.
「ちょー頑張ったけど俺の手書きのコードをLINQほど遅くすることはできなかったぜ!」
こういうのを見るとパフォーマンス的にはきつそうだぜ。だれがLINQをGPUでドライブする謎テクノロジーを開発してくれ。
カスタムインポーターとかのパフォーマンスに影響しないところで使えばいいのかもしれんが、そっちの使い方でもXMLをパースするときにちょっと役立つかも、くらいしか思いつかないなあ。なにかゲーム開発向けにいい感じな使い方が存在するのかしらん。
- Monadic Parser Combinators using C# 3.0 (http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx)
DSLとか設定ファイルのパーサを書くときに役に立ったりするのか?この書き方が理解しやすい形式になっているのかははなはだ疑問だが、コンパイラコンパイラっぽい書き方ができそうな感じはする。