楔子
來下這些概念
R22,Crossgen2這兩個東西,跟前面講的AOT和CLR有異曲同工之妙,到底什么呢?本篇來看下。
R2R
R2R(ReadyToRun),是一種結合了AOT和CLR編譯模式,取其優點,拋其缺點的一種編譯方式。
具體的呢,R2R包含了本地機器碼編譯(AOT)和即時編譯(JIT),R2R把一些函數編譯的最佳結果存儲在DLL或者Exe里面,下次直接進行調用。而沒有被編譯的函數,則調用RyuJit進行編譯,視乎情況而定是否保存結果。這樣就導致了,R2R的特殊編譯模式。而AOT的缺點比如:需要完全匹配的編譯設置,放棄許多優化,并且在跨模塊通用虛擬方法實現存在麻煩的情況下得以通過JIT即時來解決。而JIT的缺點,比如第一次啟動較慢,無論什么函數都要來一遍即時編譯等等都得以通過AOT解決。
兩相互補,完美配合,應該是微軟的初衷。
Crossgen2
Crossgen2 生成包含 CoreCLR 運行時的代碼和數據結構的 ReadyToRun 模塊.
簡單點,這個工具就是生成R2R格式的文件,以供CLR按照既定的格式進行運行和編譯。
而AOT的編譯器ILC,則是與crossgen2共享代碼庫的
終章
ILC和Crossgen2是兩個工具,分別生成AOT目標文件和R2R格式文件。