.NET 4.6的RyuJIT编译器中又发现两个严重的Bug
在.NET 4.6的RyuJIT編譯器中又發(fā)現(xiàn)了兩個(gè)嚴(yán)重的bug,開發(fā)者Andrey Akinshin已經(jīng)將第一個(gè)bug記錄下來,并提供了以C#編寫的概念驗(yàn)證式代碼以解釋其中的問題。而正是StackOverflow上的一名用戶“BrandonAGr”在網(wǎng)站上的留言啟發(fā)Akinshin編寫了這段代碼。
\\Akinshin在示例中使用了可空的布爾類型,它展示了當(dāng)RyuJIT在試圖生成優(yōu)化代碼時(shí)導(dǎo)致所生成的程序集出錯(cuò)的情況。從這個(gè)示例的運(yùn)行結(jié)果來看,它在首次運(yùn)行時(shí)會(huì)產(chǎn)生錯(cuò)誤,而第二次運(yùn)行時(shí)卻一切正常,這一點(diǎn)更令人頭疼。Akinshin在總結(jié)中說道:“RyuJIT似乎存在著一個(gè)相當(dāng)棘手的優(yōu)化bug,這個(gè)bug的產(chǎn)生依賴于大量的附加條件,而對(duì)于源代碼的每次修改都會(huì)破壞它的可重現(xiàn)性?!?/p>\\
所幸來自微軟的開發(fā)者“schellap”已經(jīng)為這一錯(cuò)誤提交了一個(gè)修復(fù),但就像本周早先所報(bào)告的問題一樣,目前還沒有發(fā)布任何二進(jìn)制的補(bǔ)丁包。使用者對(duì)于RyuJIT目前的現(xiàn)狀表示了他們的挫折感與憂慮。用戶“EasmoneNerbonne”認(rèn)為,根據(jù)所報(bào)告的bug情況來看,“……看起來,最好的做法是在近期全面停止使用[RyuJIT],而不僅僅是禁用尾調(diào)用功能而已?!?Akinshin對(duì)此也表示了贊同。而用戶Daniel Marbach也說道:“……那篇介紹RyuJIT的博客應(yīng)當(dāng)更新一下這些bug的情況,并且微軟應(yīng)該發(fā)布一篇公開聲明,清楚地說明:不要在生產(chǎn)環(huán)境中使用RyuJIT。”(原文即以大寫表示強(qiáng)調(diào))
\\第二個(gè)bug是由GitHub用戶Hyunho Richard Lee所報(bào)告的,他通過一段F#代碼的示例展現(xiàn)了這個(gè)bug:原本應(yīng)該正常運(yùn)行的程序卻產(chǎn)生了錯(cuò)誤(拋出FatalExecutionEngineError異常)。按照Lee的說法,對(duì)于能夠正常運(yùn)行的、以.NET 4.5.1(或4.5、4.5.2)為目標(biāo)的F# 3.1程序,在安裝.NET 4.6 RC后就會(huì)產(chǎn)生問題。
\\Lee為F#開發(fā)者總結(jié)了這個(gè)問題:
\\\如果F#開發(fā)者在現(xiàn)有應(yīng)用的任何一處代碼中,對(duì)于KeyValuePair類型的Seq執(zhí)行了Seq.distinct方法,那么他們必須對(duì)運(yùn)行環(huán)境加以控制,確保部署環(huán)境中沒有安裝.NET 4.6。另一種做法是立即重新設(shè)置項(xiàng)目的目標(biāo),隨后立即重新部署這些項(xiàng)目。
\\\微軟的開發(fā)者sivarv暗示這個(gè)問題已經(jīng)在一個(gè)提交中得以修復(fù),但正如上文所述,目前還沒有公開宣布任何二進(jìn)制補(bǔ)丁包的發(fā)布日期。
\\查看英文原文:Two More Major Bugs Revealed in .NET 4.6's RyuJIT Compiler
總結(jié)
以上是生活随笔為你收集整理的.NET 4.6的RyuJIT编译器中又发现两个严重的Bug的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存中OLTP(Hekaton)的排序警
- 下一篇: F# 4.0于全平台发布