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