ものがたり(旧)

atsushieno.hatenablog.com に続く

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データが作られてしまうためです。