标签:
今天看到园子里有一篇新闻稿.NET 4.6的RyuJIT编译器中发现严重的Bug提到,在.Net 4.6的x64程序中默认启用新的JIT程序RyuJIT在处理尾递归指令的时候有一个Bug,导致无法得到正确的结果。
微软在其官方BlogRyuJIT Bug Advisory in the .NET Framework 4.6更是较为详细的介绍了这一bug。虽然尾递归使用得并不多(貌似在F#中有很多应用),但这个bug算是比较严重的了:
对于这个bug,无外乎三种方案:
这三种方式中,虽然方法2和方法3可以在使用.Net 4.6的前提下解决这个bug,但需要注意的是,由于这个是.Net 4.6正式版的Bug,而JIT又是一种本地行为,需要在所有执行你的程序的机器上都应用该修改,加上这个bug是非常隐晦的,不会马上出错,出错也不一定知道是这儿出的错。这两种修改方式真正执行起来是非常困难的。
另外,在另一篇blog中提到了几个.Net 4.6的几个bug:http://nickcraver.com/blog/2015/07/27/why-you-should-wait-on-dotnet-46/,看来,在生产环境中使用.Net 4.6还得掂量掂量了。
标签:
原文地址:http://www.cnblogs.com/TianFang/p/4695086.html