楔子
ILC是C#寫的,CLR是C++。.Net 7中,為何微軟執意用一個托管的模型去嘗試取代非托管框架呢?至少native code方面它是這么做的
這個問題一直縈繞腦海。
非托管和托管
十年前出版的那本久負盛名的《CLR via C#》至今都是不可或缺的存在,它里面有句話說的是:一些理由使我們相信未來的托管代碼在執行效率上會比當前的非托管代碼更優秀。大多數托管應用程序目前的性能已相當不錯,將來還有望進一步提升。
而十年前的未來,也就是現在。
方面
一:
要看快,從結果方面看,也就是托管函數運行的效率,速度。ILC作為全員預編譯,比CLR便加載內存,邊編譯,遇到函數就編譯是要快很多的。
二:
從過程方面,ILC的運行速度遠不如C++這種系統級語言來的更快。但是.Net本身是個托管的框架,它負責的或者執行的是被JIT之后的結果。所以無論ILC過程多慢,只要ILC的結果快于CLR運行的過程,ILC依然比CLR快。
結構
谷歌有個golang語言,它的runtime就是自舉的,也就是runtime用go語言寫的。微軟估計也想搞這種方向,把.Net runtime搞成C#寫的,至少目前看來,native code這塊是實現了這點。
那么將來微軟的技術體系模型,runtime這塊大約只有托管dll和ILC這兩項了。前者作為參數進行析構,后者則承擔了之前CLR和JIT的大部分工作。并且還承擔了LLVM和寫目標文件的重任。
結尾
微軟體系的技術更新,有點快。
本文作者:江湖評談(公眾號同名)