読者です 読者をやめる 読者になる 読者になる

XNAにLINQがきた……が何に使えばいいんだこれ

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がよく分かってないのだが、

にあるものはだいたい使えると思っていいんだよね?

で、もちろん目玉はLINQなのだろうが、

これってゲーム内だとどの辺で使えばいいんだろう。もしLINQ to Objectが十分に速いのであれば、ゲーム内オブジェクトを全部匿名型で扱って、引っ張ってくるときは全部LINQでなんとかする、っていう手抜きもできるんだろうけど、たぶんそんなにパフォーマンスでないよね?

匿名型を使わないにしても、例えば特定の四角の中に存在する敵弾オブジェクトを全部持ってくる、とかいうのをLINQで書いてしまって、はたして360実機上でちゃんとしたスピードで動くのか、っていうところが分からんと使っていいものかどうか分からんなあ。自分で調べろってことか。でもBetaだと360で動かせないんだよね。

Bottom line - despite my best efforts I just couldn't make my hand-written code perform as poorly as Linq.

「ちょー頑張ったけど俺の手書きのコードをLINQほど遅くすることはできなかったぜ!」

こういうのを見るとパフォーマンス的にはきつそうだぜ。だれがLINQGPUでドライブする謎テクノロジーを開発してくれ。

カスタムインポーターとかのパフォーマンスに影響しないところで使えばいいのかもしれんが、そっちの使い方でもXMLをパースするときにちょっと役立つかも、くらいしか思いつかないなあ。なにかゲーム開発向けにいい感じな使い方が存在するのかしらん。

DSLとか設定ファイルのパーサを書くときに役に立ったりするのか?この書き方が理解しやすい形式になっているのかははなはだ疑問だが、コンパイラコンパイラっぽい書き方ができそうな感じはする。