まとめ IL勉強の軌跡をまとめておく
あいさつ
どうも、はかせです。
このブログもなんやかんやいって1年強やってきました。
そうすると色んな記事が出てくるわけで
後から見ると自分でもどこになにがあるかわかりにくくなっている状況です。
なのでこれからちょくちょく時間を見つけて
過去記事のまとめや必要に応じてリライトなんかもしていきたいと思います。
(まぁそうそう時間ないんで頻度は低いでしょうが)
今回は割と最近やった
C#のIL記事をまとめていきます。
ILとは
hakase0274.hatenablog.com
ざっくり言うとC#を機械語に直すために
一旦変換する言語です。
よく外国語勉強するときにやる奴ですよ。
ドイツ語→英語→日本語とか
フランス語→英語→日本語とか
(もしかしてこれやるの私ぐらい・・・?)
DnSpy
C#がどういうILに変換されるかを調べる
.NETデコンパイラってのがあるんですけど
その中の一つです。
これはそのなかでも特に高機能で色んな事が
これ一つでできます。
ただ高機能な分動作は少しもっさりしてますし、
逐一変更したら解放しなきゃいけないなど
イテレーション速度は若干遅めです。
私はぶっちゃけ数打ちまくって勉強する性質なので
すこし勉強用ツールとしては合わなかったかなぁと
今となっては思います。
後半はほとんどLINQPad+ILSpyでしたしね。
hakase0274.hatenablog.com
IL手書き
ILはC#が変換された言語なわけですが、
C#上でどういうILを吐くかってのを組み込むことができます。
というかIL書きってのは総じて
吐くILをC#コードに埋め込むことを言ったりします。
hakase0274.hatenablog.com
DynamicMethod
最強 of 最強
C#やILに存在する言語のルールを
超越するただ一つの存在です。
hakase0274.hatenablog.com
ループ
ILってのは≒アセンブラなんで
forだとかifだとか気の利いた構文は存在しません。
そういったことは全てgoto文で実現します。
ぶっちゃけ私はここが一番苦戦しましたね。
(ループではなくメソッドの種類にですが)
hakase0274.hatenablog.com
拡張メソッド
IL書きってのはVSとかのコード補完の恩恵を授かれません。
なので間違った書き方をしても誰も教えてくれません。
ただ動かないだけです。
それをちまちま一つずつ撲滅していくわけですが
その総数をできるだけ減らすためにも
こういった拡張メソッドを用意しておいて
少しでもIDEの恩恵を受けれるようにしておくことが吉だと思います。
hakase0274.hatenablog.com
命令の種類
同じような命令ってどの言語にもありますよね。
似てるんでわかりにくいですけど
そこには確かに意味があります。
その意味を知ったうえで使うのと知らないで使うのとでは
結構差があると思いますよ。
hakase0274.hatenablog.com
自動メモ化
私が上げてきたIL記事の中で一番反響があった記事ですね。
この記事は今までのILの知識を総動員して作ったものになります。
結果としては4.5秒の処理を
1ミリ秒まで高速化することに成功しております。
hakase0274.hatenablog.com
コンストラクタ
ILではというよりこれはC#のAssemblyBuilderの特徴ですが、
コンストラクタは他のメソッドとは少し扱いが違います。
なので継承とか使いだすとちょっとハマるかもしれませんね。
hakase0274.hatenablog.com
デストラクタ
こいつもこいつで少し扱いが特殊です。
というのもデストラクタというメソッドを
取得するのが少し手間なんですよね。
ただ一度できてしまえばあとはそんな苦労しないと思います。
hakase0274.hatenablog.com
あとがき
今回はIL記事のまとめでした。
一個一個振り返りながらコメントとかもつけてみましたが
いかがでしたでしょうか。
ここに上げた記事を一通り見て
それとなく手元で動かしてもらったら
ILってのがなんなのか
どう使うのか
どう難しいのかってのが
なんとなーくわかってもらえるんじゃないかなぁと思っております。
(さすがに自画自賛しすぎ?)
ILに限らずですが
世間一般で難しいと言われているものは
大抵難しいのではなくめんどくさいだけです。
ILもそうですしDirectXもそうです。
普段C#とかUnityとかが内部でやってくれてることを
プログラマーが自分でやるだけのことです。
なのでそんなアレルギーみたく毛嫌いしないで
一回やってみてはいかがでしょうか?
今回の記事が良ければスターやコメント等よろしくお願いします。
それでは今回はこの辺でノシ
一個一個順を踏んでやっていけば
誰でもできることです。