您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了.NET 4.6的RyuJIT編譯器中的Bug實例分析的相關(guān)知識點,內(nèi)容詳細易懂,操作細節(jié)合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學習“.NET 4.6的RyuJIT編譯器中的Bug實例分析”的知識吧。
在.NET 4.6的RyuJIT編譯器中又發(fā)現(xiàn)了兩個嚴重的bug,開發(fā)者Andrey Akinshin已經(jīng)將第一個bug記錄下來,并提供了以C#編寫的概念驗證式代碼以解釋其中的問題。而正是StackOverflow上的一名用戶“BrandonAGr”在網(wǎng)站上的留言啟發(fā)Akinshin編寫了這段代碼。
Akinshin在示例中使用了可空的布爾類型,它展示了當RyuJIT在試圖生成優(yōu)化代碼時導致所生成的程序集出錯的情況。從這個示例的運行結(jié)果來看,它在首次運行時會產(chǎn)生錯誤,而第二次運行時卻一切正常,這一點更令人頭疼。Akinshin在總結(jié)中說道:“RyuJIT似乎存在著一個相當棘手的優(yōu)化bug,這個bug的產(chǎn)生依賴于大量的附加條件,而對于源代碼的每次修改都會破壞它的可重現(xiàn)性。”
所幸來自微軟的開發(fā)者“schellap”已經(jīng)為這一錯誤提交了一個修復,但就像本周早先所報告的問題一樣,目前還沒有發(fā)布任何二進制的補丁包。使用者對于RyuJIT目前的現(xiàn)狀表示了他們的挫折感與憂慮。用戶“EasmoneNerbonne”認為,根據(jù)所報告的bug情況來看,“……看起來,最好的做法是在近期全面停止使用[RyuJIT],而不僅僅是禁用尾調(diào)用功能而已。” Akinshin對此也表示了贊同。而用戶Daniel Marbach也說道:“……那篇介紹RyuJIT的博客應當更新一下這些bug的情況,并且微軟應該發(fā)布一篇公開聲明,清楚地說明:不要在生產(chǎn)環(huán)境中使用RyuJIT。”(原文即以大寫表示強調(diào))
第二個bug是由GitHub用戶Hyunho Richard Lee所報告的,他通過一段F#代碼的示例展現(xiàn)了這個bug:原本應該正常運行的程序卻產(chǎn)生了錯誤(拋出FatalExecutionEngineError異常)。按照Lee的說法,對于能夠正常運行的、以.NET 4.5.1(或4.5、4.5.2)為目標的F# 3.1程序,在安裝.NET 4.6 RC后就會產(chǎn)生問題。
Lee為F#開發(fā)者總結(jié)了這個問題:
如果F#開發(fā)者在現(xiàn)有應用的任何一處代碼中,對于KeyValuePair類型的Seq執(zhí)行了Seq.distinct方法,那么他們必須對運行環(huán)境加以控制,確保部署環(huán)境中沒有安裝.NET 4.6。另一種做法是立即重新設置項目的目標,隨后立即重新部署這些項目。
微軟的開發(fā)者sivarv暗示這個問題已經(jīng)在一個提交中得以修復,但正如上文所述,目前還沒有公開宣布任何二進制補丁包的發(fā)布日期。
關(guān)于“.NET 4.6的RyuJIT編譯器中的Bug實例分析”就介紹到這了,更多相關(guān)內(nèi)容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網(wǎng)站!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。