RyuJIT的華麗轉身

2021-08-20 22:22:25 字數 1454 閱讀 8087

ryujit是作為.net即時編譯器的代號稱謂,它是.net執行時的基本元件之一。與此相反的是,roslyn作為c#編譯器,其編譯c#**成為il位元組碼。然後,其再將il位元組碼編譯成相對於多種處理器的機器碼。

隨著最近對dotnet/coreclr #18064的合併,將生成元件的遺留**(來自較老的jit實現)從ryujit的原始碼中進行了移除。這個版本刪除了近5萬行**!現在,四種處理理體系結構(x86、x64、arm32、arm64)可完全基於ryujit架構。

回顧一下關於ryujit短暫的歷史,以及我們是如何做到現在這樣的,是一件很有趣的事情。

ryujit架構的設計開始於9年前,而著手實現開始於7年前。ryujit是現有的jit32編譯器(它支援x86和arm32)的進化版實現,並逐步用乙個新的暫存器分配器和**生成器替換了編譯器的大部分「後端」,併入了許多新的和改進的「前端」優化元件。在向新的**生成體系結構過渡的過程中,我們將舊**與之結合。這樣做提供了好處,但是在測試和維護成本方面,以及開發人員需要處理由大量的分散的遺留**的困惑,這些都是非常昂貴的。現在,由於ryujit在功能上優於遺留**,所以現在是刪除遺留**,簡化jit**,以及著眼於未來的時候了。

在近5年前,ryujit的x64版本作為社群技術預覽版展示給世界。這在當時是不尋常的。我們為人們提供了多年的更新,讓人們可以嘗試,並在我們發布產品之前給我們反饋。ryujit的x64系列是隨.net framework 4.6發布的,它取代了3年前的jit64,對於現在而言,它是乙個遺留的**庫。

在去年發布的.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的相關工作,而這項工作最近又被高通的貢獻者們所做的重要工作推進了。

總的來說,ryujit的投入一直專注於發展**庫,以便更好地支援:

1)多**生成目標(指令集和作業系統);

2)改進優化;

3)更好和更靈活的**生成;

4)開放、靈活和健壯的設計與實現;

我們相信新的ryujit編譯器架構比(現在已刪除)傳統的**生成器實現這些目標有很大的改進。

最近,我們在ryujit**生成器中,投入了新的**生成技術。例如,simd支援,特定於硬體內部的體系結構,以及對linux軟體約定的支援。

到達這一點是非常令人滿意的,我們已經可以看到,刪除所有這些舊的**將使我們在前進的過程中更加靈活。

感謝所有為這一切長期努力做出貢獻的人!

文:

建構函式 JS函式的華麗轉身

1.一般寫法規範 建構函式都應該以 乙個大寫字母開頭,eg function person 而非建構函式則應該以乙個小寫字母開頭,eg function person 2.呼叫方式 任何函式,只要通過 new 操作符來呼叫,那它就可以作為建構函式 任何函式,如果不通過 new 操作符來呼叫,那它跟普...

python2 python3的華麗轉身

最近python2已經進入倒計時了,為了防止之前的 出現混亂,盡快進行移植是很有必要的 在python2 中是不區分bytes和str型別的,python2分別用str和unicode表示字串行 在python3中bytes和str中是區分的,bytes由str通過encode方法轉化得到的,str...

董衛鳳 不服輸的華麗轉身(一)

每個人都渴望成功,想要功成名就,獲得掌聲一片。然而,成功並不是那麼容易。除了自己情商,智商,天賦等等之外,還有就是堅持。我們都知道,大成功者是終身學習者,大成功者是大磨難者。然而,社會上大多數人都是被動學習者,被逼無奈才會想到學習。董衛鳳卻不是如此。從乙個相對封閉的地方出來闖蕩,缺乏的肯定不僅僅是工...