Mono开始采纳.NET源代码

  英文原文:Mono Adopts .NET Source Code

  Mono 4.0 发布说明的草稿目前已经提交,在新版本的诸多变更之中,值得注意的一点是 Mono 团队开始采纳微软 CoreCLR 项目中的源代码了。

  让我们说得更准确一些,微软实际上一共推出了三个以 MIT 方式授权的源代码集。

  • ReferenceSource
  • CoreFX
  • CoreCLR

  由于 CoreCLR 项目本身依然还不够稳定,因此 Mono 团队目前主要专注于 ReferenceSource 项目中的代码。团队的短期目标是将 Mono 项目中一些有 bug 或未完成的组件替换为 .NET 的对应代码,你可以在 Trello 网站上跟踪该项目的进展情况。

  除了 Decimal 类之外,以下命名空间中的代码也都被替换为 ReferenceSource 项目中的源代码了:

  • System.Collections
  • System.Collections.Concurrent
  • System.Collections.Generic
  • System.Collections.Specialized
  • System.ComponentModel
  • System.ComponentModel.Design
  • System.Diagnostic.Contracts
  • System.Linq
  • System.Linq.Parallel
  • System.Text.RegularExpressions
  • System.Runtime.CompilerServices
  • System.Threading.Tasks

  而其它命名空间中也有多个类的源代码已经整合到 Mono 项目中了

  不再支持的特性

  Mono 将不再支持生成对应 .NET 4.0 或更早版本的程序集了,在新的版本中只支持生成 .NET 4.5 以及基于移动档案的程序集。这一变动引起了那些使用 Unity 进行开发的使用者的疑虑,因为 Unity 的开发目前还依赖于某个早期版本的 Mono 中对 .NET 3.5 的实现。

  新版本也将不再提供对 Entity Framework 的“内置支持”,因为毕竟大多数用户都会选择使用 NuGet 下载的 EF 版本进行开发。与之类似的是,Mono 中也不再提供自己的 Npgsql 驱动了。

  性能优化

  之前,Mono 对于浮点数的操作默认是使用最大精度的。虽然使用 64 位算法进行 32 位浮点数操作同样是安全的,但这种方式对于性能会带来不利的影响。因此,新版本中提供了一个选项,可以选择进行 32 位的计算。

  方法的内联也得到了改进。“我们现在能够对最多 8 个机器字长的数据结构的拷贝进行内联,而之前只支持最多 5 个机器字长。超过 8 个字长的数值仍将使用 memcpy 指令以完成操作”。

  此外,对于原子操作的运行方式也有某些地方进行了变更。

现在,JIT 能够将框架中的所有原子方法认可为固有方法,并进行内联,这一点利益于平台中某些特定代码的功能。这些方法包括 Interlocked 和 Volatile 的所有方法,以及 Thread 类中的 MemoryBarrier、VolatileRead 和 VolatileWrite 方法。

在 x86 及 64 位机器上,Thread.MemoryBarrier 的实现方式选择了使用 mfence 指令,而不是使用 lock add rsp,0 指令。此外,Interlocked.Exchange 的实现使用了 xchg [dst], val 指令,而不是之前那种更耗性能的 lock cmpxchg [dst], val 循环方式。

对于使用获取/释放语法的原子方法来说,我们将为这些语法生成内存屏障,而不是使用过于严格的顺序一致性方式。

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Mono开始采纳.NET源代码

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址