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

Mono 2.0 の Expression Trees と HashSet を Xbox 360 環境に移植してみた (可能な範囲で)

XNA .NET

ネタ元は『XNAにLINQがきた……が何に使えばいいんだこれ - ABAの日誌』.
XNA Creators Club FAQ より.

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 beta の Xbox 360 環境には Expression Trees が存在しない.HashSet<T> や ReaderWriterLockSlim も未収録.オリジナルの System.Core.dll から Linq to Object 関係だけ引っ張ってきたという感じだ.単に .NET Compact Framework 3.5 と同じと言えばそれまでなんだけど.
というわけで,いつものように Mono 2.0 Preview のソースコード を拝借.さしあたって Expression Trees と HashSet<T> を移植してみたものが以下.ソースも同梱.
http://www.dwahan.net/nyaruru/hatena/System.Core.Xna.20080919.zip
上記ファイルに含まれる System.Core.Xna.dll を参照設定に加えると,Xbox 360 環境でも (可能な範囲で) Expression Trees が使えるようになる.
Xbox 360 環境では Lightweigt Code Gen (LCG) が使えないため,これに依存する部分は全て省略してある. Expression Trees の実行時コンパイルはできない.
対応策として,Xbox 360 環境でも動く Expression Trees のインタプリタなら作れそうな気がする.うまくいけばちょっと面白いが,詳細は詰めていないのでよく分からない.作りはじめてみたものの,途中でどうしようもない壁にぶち当たりそうではある.要暇.
ReaderWriterLockSlim は Mono 2.0 にも存在しなかったので見送り.
ついでに Achiral の最新版Xbox 360 向けにビルドできるようにしておいた.