2018-06-19前端
RyuJIT是做爲.NET即時編譯器的代號稱謂,它是.NET運行時的基本組件之一。與此相反的是,Roslyn做爲C#編譯器,其編譯C#代碼成爲IL字節碼。而後,其再將IL字節碼編譯成相對於多種處理器的機器碼。後端
隨着最近對dotnet/coreclr #18064的合併,將生成組件的遺留代碼(來自較老的JIT實現)從RyuJIT的源碼中進行了移除。這個版本刪除了近5萬行代碼!如今,四種處理理體系結構(x8六、x6四、ARM3二、ARM64)可徹底基於RyuJIT架構。架構
回顧一下關於RyuJIT短暫的歷史,以及咱們是如何作到如今這樣的,是一件頗有趣的事情。測試
RyuJIT架構的設計開始於9年前,而着手實現開始於7年前。RyuJIT是現有的JIT32編譯器(它支持x86和ARM32)的進化版實現,並逐步用一個新的寄存器分配器和代碼生成器替換了編譯器的大部分「後端」,併入了許多新的和改進的「前端」優化組件。在向新的代碼生成體系結構過渡的過程當中,咱們將舊代碼與之結合。這樣作提供了好處,可是在測試和維護成本方面,以及開發人員須要處理由大量的分散的遺留代碼的困惑,這些都是很是昂貴的。如今,因爲RyuJIT在功能上優於遺留代碼,因此如今是刪除遺留代碼,簡化JIT代碼,以及着眼於將來的時候了。優化
在近5年前,RyuJIT的x64版本做爲社區技術預覽版展現給世界。這在當時是不尋常的。咱們爲人們提供了多年的更新,讓人們能夠嘗試,並在咱們發佈產品以前給咱們反饋。RyuJIT的x64系列是隨.NET Framework 4.6發佈的,它取代了3年前的JIT64,對於如今而言,它是一個遺留的代碼庫。spa
在去年發佈的.NET Core 2.0中,x86取代了JIT32。做爲公共開發過程的一部分,咱們宣佈了JIT32的替換,並在.NET Core 2.0的發佈聲明中分享了完成的工做。操作系統
.NET Core 2.0做爲包含支持ARM32架構的預覽版,使用了遺留後端代碼。截至去年12月,對於dotnet/coreclr #15134的合併,.NET Core 2.1版本正式支持了ARM32體系架構。這一變化也包括了三星的許多貢獻。設計
RyuJIT對於ARM64架構的支持,在.NET Core 2.1中近乎爲預覽版程度,此支持是在RyuJIT架構實現之初就進行構建的。實際上,在過去的4年中,咱們一直致力RyuJIT支持ARM64的相關工做,而這項工做最近又被高通的貢獻者們所作的重要工做推動了。blog
總的來講,RyuJIT的投入一直專一於發展代碼庫,以便更好地支持:開發
1)多代碼生成目標(指令集和操做系統);
2)改進優化;
3)更好和更靈活的代碼生成;
4)開放、靈活和健壯的設計與實現;
咱們相信新的RyuJIT編譯器架構比(如今已刪除)傳統的代碼生成器實現這些目標有很大的改進。
最近,咱們在RyuJIT代碼生成器中,投入了新的代碼生成技術。例如,SIMD支持,特定於硬件內部的體系結構,以及對Linux軟件約定的支持。
到達這一點是很是使人滿意的,咱們已經能夠看到,刪除全部這些舊的代碼將使咱們在前進的過程當中更加靈活。
感謝全部爲這一切長期努力作出貢獻的人!
參考連接:https://blogs.msdn.microsoft.com/dotnet/2018/06/19/the-ryujit-transition-is-complete/