Mono 1.0と.NET Framework 1.1の互換性
webをぶらついていたら、面白いページを発見。細かく動作の違いを公開しているページは世界でも少ないと思うので、とても貴重です。しかーし! このページでは互換性について高い評価をいただいているんだけど、現実にはそこまで互換性が高いわけではないのです。たとえば…
- iso-2022-jp がサポートされていない。EUCは3バイト文字を正しく扱えていない。Shift_JISの一部文字は正しく扱えていない(特にMS932と正統Shift_JISで異なる部分)
- Thread.Abort()の動作が一部異なる。多分ここにあるサンプルコードの振る舞いは違う
- CultureInfoは基本的にはIBM ICUが情報源であり、MS.NETとは少なからず異なる*1
- Binary Serializationで.NET Frameworkとの間でdeserializeできるかどうかはクラス次第
…とまあ、落とし穴は所々あるわけです、ハイ。
*1:ちなみにCultureInfoのデータはランタイム内のmono/mono/culture-info-table.h内にハードコードして格納されているので、環境に依存するなんてことはありません。なぜハードコードされているかというと、そうしないとAppDomainごとにCultureInfoデータが作られてしまうためです。