IL
5月の記事の続き。続きを書く日が来るとは自分でも驚き。IL のお話です。インスタンスメソッドを呼ぶときにコンパイラが call を生成したり、callvirt を生成したりします。その違いは何よ?とずっと疑問だったんですが、その答えが!vir http://blogs.msdn…
ILはごく少数の型しか意識しないそうだ(規格のあちらこちらで意識する型の数が違うような…(^^;)。CLS(共通言語規定)やCTS(共通型システム)はコンパイラなどのIL生成器ががんばるところらしい。 海外のcallとcallvirtの記事 callとcallvirtがJITによってどう…
MSDNライブラリの Constrained の説明によると、「通常、callvirt 命令は値型では有効ではありません。」だそうだけど、普通に動いた。ILの世界はおおらかだ。 using System; using System.Reflection.Emit; struct Baz { private int n; public int Value {…
nullもガッと鳴いたよ。 using System; using System.Reflection.Emit; class Duck { public void Say() { Console.WriteLine( "ガッ" ); } } class Class3 { static void Main() { // void Do() メソッドを作る DynamicMethod dm = new DynamicMethod( "Do"…
http://blogs.msdn.com/joelpob/archive/2004/03/31/105282.aspxデリゲート化は必須ではないみたい。
当面ILとC#と.NETな記録。インサイドかもしれないし、ダークサイドかもしれない実験記です。 実験1 ILの call と callvirt の違いがよくわからないのにプロパティを読もうってのがそもそもの間違いだなと思って、比較するコードを書いてみました。 よくある…
Constrainedって仮想メソッド呼ぶときにしか使えないだけなのか…。素直にCall使えばよさげ。手抜きできると思ったのに…。
青柳さんのところで DynamicMethod 用の DebuggerVisualizer の情報を発見。新バージョンのIL Visualizerがあったので、こっちを入れてみました。 http://blogs.msdn.com/haibo_luo/archive/2006/11/16/take-two-il-visualizer.aspx インストールは記事の下…
もうかれこれ一週間もこれいじってるのか!間口が広いライブラリを作るのは大変ですねぇ。 で、新しいバグを2件見つけました。再現コード。 using System; using System.Collections.Generic; using SioKoshou; interface IDetarame { char Value { get; } …
id:siokoshou:20070505 のコードにもう一つ問題がありました。 DynamicMethod dm = new DynamicMethod( "Compare", typeof( int ), new Type[] { t, t }, this.GetType() ); (tは typeof( T )) として、動的メソッドを FastPropertyComparer クラスのメソッ…
FastPropertyComparerはいろいろ試しているうちにぶくぶくと大きくなってしまい、ついでに.NETのライブラリを拡張するかのような大きな目標とあいまって、テスト項目が大変なことになってしまってます。MSの波村さんの苦労がちょっとわかりました(^^; 様々な…