今天看到園子裏有一篇新聞稿.NET 4.6的RyuJIT編譯器中發現嚴重的Bug提到,在.Net 4.6的x64程序中默認啓用新的JIT程序RyuJIT在處理尾遞歸指令的時候有一個Bug,致使沒法獲得正確的結果。git
微軟在其官方BlogRyuJIT Bug Advisory in the .NET Framework 4.6更是較爲詳細的介紹了這一bug。雖然尾遞歸使用得並很少(貌似在F#中有不少應用),但這個bug算是比較嚴重的了:github
對於這個bug,無外乎三種方案:優化
這三種方式中,雖然方法2和方法3能夠在使用.Net 4.6的前提下解決這個bug,但須要注意的是,因爲這個是.Net 4.6正式版的Bug,而JIT又是一種本地行爲,須要在全部執行你的程序的機器上都應用該修改,加上這個bug是很是隱晦的,不會立刻出錯,出錯也不必定知道是這兒出的錯。這兩種修改方式真正執行起來是很是困難的。spa
另外,在另外一篇blog中提到了幾個.Net 4.6的幾個bug:http://nickcraver.com/blog/2015/07/27/why-you-should-wait-on-dotnet-46/,看來,在生產環境中使用.Net 4.6還得掂量掂量了。調試