call と callvirt その4
ILはごく少数の型しか意識しないそうだ(規格のあちらこちらで意識する型の数が違うような…(^^;)。CLS(共通言語規定)やCTS(共通型システム)はコンパイラなどのIL生成器ががんばるところらしい。
海外のcallとcallvirtの記事
- callとcallvirtがJITによってどう展開されるか
- http://www.wrox.com/WileyCDA/Section/id-291453.html
- これを読んで、値型でcallvirtが使えるのはやっぱりおかしいと思った…
- http://www.wrox.com/WileyCDA/Section/id-291453.html
- C++/CLIではcallを使って継承階層の途中のメソッドを呼べるよってお話
規格書から目に付いたところをいくつか
- CLIのマネージポインタと参照の違い(12.1.1.2より)
オブジェクト参照(規格ではO型)はオブジェクトの外側、すなわちオブジェクト全体を参照する。操作の数は少なめ(ceq, ldind.ref, call, dsfld, stfldなど)。
マネージポインタ(同&型)はオブジェクトの内側を参照する。オブジェクト内のフィールドや配列内部の要素を指すことが許可される。オブジェクトや配列先頭を指すことは許可されない。評価スタック、静的変数、管理外メモリ(!)を指すことも許される。
- バイト順序(12.6.3)
バイト順序はCPU依存だそうで、順序に依存するコードはすべてのプラットフォーム上で動作しなくてもよいそうな。MacのSilverlightはPowerPCでも動くのかな?
- JISメモ
委譲 - デリゲート
特性 - プロパティ (最初なんのことかわからなかったw)