IL

call と callvirt その5

C# IL

5月の記事の続き。続きを書く日が来るとは自分でも驚き。IL のお話です。インスタンスメソッドを呼ぶときにコンパイラが call を生成したり、callvirt を生成したりします。その違いは何よ?とずっと疑問だったんですが、その答えが!vir http://blogs.msdn…

call と callvirt その4

IL

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

call と callvirt その3 : struct と callvirt

IL C#

MSDNライブラリの Constrained の説明によると、「通常、callvirt 命令は値型では有効ではありません。」だそうだけど、普通に動いた。ILの世界はおおらかだ。 using System; using System.Reflection.Emit; struct Baz { private int n; public int Value {…

ILの call と callvirt の違い その2

IL C#

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"…

DynamicMethodによる動的生成の方法

C# IL

http://blogs.msdn.com/joelpob/archive/2004/03/31/105282.aspxデリゲート化は必須ではないみたい。

ILの call と callvirt の違い

IL C#

当面ILとC#と.NETな記録。インサイドかもしれないし、ダークサイドかもしれない実験記です。 実験1 ILの call と callvirt の違いがよくわからないのにプロパティを読もうってのがそもそもの間違いだなと思って、比較するコードを書いてみました。 よくある…

Constrained

IL

Constrainedって仮想メソッド呼ぶときにしか使えないだけなのか…。素直にCall使えばよさげ。手抜きできると思ったのに…。

IL Visualizer

C# IL

青柳さんのところで DynamicMethod 用の DebuggerVisualizer の情報を発見。新バージョンのIL Visualizerがあったので、こっちを入れてみました。 http://blogs.msdn.com/haibo_luo/archive/2006/11/16/take-two-il-visualizer.aspx インストールは記事の下…

FastPropertyComparer その3

C# IL

もうかれこれ一週間もこれいじってるのか!間口が広いライブラリを作るのは大変ですねぇ。 で、新しいバグを2件見つけました。再現コード。 using System; using System.Collections.Generic; using SioKoshou; interface IDetarame { char Value { get; } …

JITの参照範囲チェックをスキップ?

C# IL

id:siokoshou:20070505 のコードにもう一つ問題がありました。 DynamicMethod dm = new DynamicMethod( "Compare", typeof( int ), new Type[] { t, t }, this.GetType() ); (tは typeof( T )) として、動的メソッドを FastPropertyComparer クラスのメソッ…

メタプログラミングと動的生成

C# IL

FastPropertyComparerはいろいろ試しているうちにぶくぶくと大きくなってしまい、ついでに.NETのライブラリを拡張するかのような大きな目標とあいまって、テスト項目が大変なことになってしまってます。MSの波村さんの苦労がちょっとわかりました(^^; 様々な…