通用中間語言 (CIL) 怎麼學習? | 知乎問答精選

 

A-A+

通用中間語言 (CIL) 怎麼學習?

2019年05月26日 知乎問答精選 暫無評論 閱讀 0 ℃ 次

【RednaxelaFX的回答(21票)】:

CIL(Common Intermediate Language),又名MSIL(Microsoft Intermediate Language),是CLI(Common Language Infrastructure)所使用的中間語言。

要學習CIL可以做實驗:先用C#寫些實驗程序,用csc編譯為.NET Assembly之後用ildasm解成MSIL。這樣可以很快熟悉C#或其它.NET語言的語言結構到MSIL的映射。這樣得到的MSIL可以通過ilasm再彙編為.NET Assembly,這樣round-trip能力非常強大。

這樣做實驗的缺點是:MSIL的語言能力比.NET上常見的高級語言所能表達的能力要大,所以從C#之類的語言生成的MSIL只能用到合法的MSIL的一部分能力,而沒用到全部。不過這「一部分」也已經是很大的部分了,夠用。

然後也可以讀讀書。有好幾本專門講MSIL的書,例如這本:Expert .NET 2.0 IL Assembler (豆瓣)

當然,學習CIL必備的參考資料是它的規範:ECMA-335 ecma-international.org/

【軒轅阿布醬的回答(0票)】:

同推薦 @RednaxelaFX 的Expert .NET 2.0 IL Assembler。

但是我不清楚你為什麼學CIL啊,因為我學CIL不過是為了瞭解一下C#編譯以後會變成什麼,平時用的最多最多的,也不過是寫個動態的property setter getter之類的,一些高級的東西只看過書瞭解過(比如方法調用callvirt、calli和call的區別引出的多態的實現方法,類和結構的field使用直接和間接的方式訪問揭示其在內存中的存儲方式等等),沒自己寫過。

我一般用Reflector來看IL代碼,可以方便的在C#和IL直接轉換:

實際上現在很多類庫不需要你動手直接寫IL,比如.NET自己的Lambda Expression Tree就可以很容易的動態生成代碼,而且還是面向對象的,操作起來比較方便。

標籤:-編譯原理 -編譯


相關資源:





給我留言