call と callvirt その4

ILはごく少数の型しか意識しないそうだ(規格のあちらこちらで意識する型の数が違うような…(^^;)。CLS(共通言語規定)やCTS(共通型システム)はコンパイラなどのIL生成器ががんばるところらしい。

海外のcallとcallvirtの記事

規格書から目に付いたところをいくつか

  • CLIのマネージポインタと参照の違い(12.1.1.2より)

オブジェクト参照(規格ではO型)はオブジェクトの外側、すなわちオブジェクト全体を参照する。操作の数は少なめ(ceq, ldind.ref, call, dsfld, stfldなど)。
マネージポインタ(同&型)はオブジェクトの内側を参照する。オブジェクト内のフィールドや配列内部の要素を指すことが許可される。オブジェクトや配列先頭を指すことは許可されない。評価スタック、静的変数、管理外メモリ(!)を指すことも許される。

  • バイト順序(12.6.3)

バイト順序はCPU依存だそうで、順序に依存するコードはすべてのプラットフォーム上で動作しなくてもよいそうな。MacSilverlightPowerPCでも動くのかな?

  • JISメモ

委譲 - デリゲート
特性 - プロパティ (最初なんのことかわからなかったw)