写点什么

Mono 开始采纳.NET 源代码

2015 年 4 月 10 日

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 循环方式。

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

查看英文原文 Mono Adopts .NET Source Code

2015 年 4 月 10 日 08:472078
用户头像

发布了 428 篇内容, 共 152.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

Python处理音频文件的实用姿势

程一初

Python 自动化 办公

MySQL从入门到精通

书旅

MySQL 索引

数字货币交易所开发,虚拟币交易平台搭建app

WX13823153201

交易所开发

Python1024办公自动化系列

程一初

Python 自动化 办公

如何与面试官更好的沟通

escray

学习 面试 面试现场

从《三体》到“中美科技战”,3分钟理解“网络”D丝为什么要迎娶“算力”白富美

华为云开发者社区

数据 网络 芯片 算力 三体

Python处理Excel文件的实用姿势

程一初

Python 自动化 办公

业务架构是什么?

周金根

BIZBOK 业务架构 IT帮 周金根

前端科普系列(2):Node.js 换个角度看世界

vivo互联网技术

node.js 前端

前端科普系列(4):Babel —— 把 ES6 送上天的通天塔

vivo互联网技术

Java 前端 ES6

【程序员自救指南】中关村保洁大叔的一句话竟然帮我转正了

华为云开发者社区

服务器 数字化 华为云 企业上云 云服务器

Python处理PDF的实用姿势

程一初

Python 自动化 办公

Python处理邮件和机器人的实用姿势

程一初

Python 自动化 办公

解读 Reference

浮白

ThreadLocal Reference ReferenceQueue Finalizer WeakHashMap

Python处理Word文件的实用姿势

程一初

Python 自动化 办公

带你全面认识 Linux

简爱W

Python处理视频文件的实用姿势

程一初

Python 自动化 办公

JavaScript 测试系列实战(一):使用 Jest 和 Enzyme 测试 React 组件

图雀社区

单元测试 自动化测试 Jest

LeetCode680-验证回文字符串 Ⅱ-Easy

书旅

LeetCode

影响音视频延迟的关键因素(三): 传输、渲染

ZEGO即构

buffer API RTC sdk

MacOS 环境下 Python 访问 MySQL

李绍俊

当地铁站都比你更努力

escray

学习 面试 面试现场

代理模式详解

海星

并发神器CSP的前世今生

soolaugust

go 并发编程 并发

前端科普系列(3):CommonJS 不是前端却革命了前端

vivo互联网技术

Java 前端 脚本

数据库设计

Jayli

数据库

Python处理图像文件的实用姿势

程一初

Python 自动化 办公

详解责任链模式

海星

宿舍晚上温度高,那是你没听“鬼故事”

华为云开发者社区

人工智能 AI 华为云 modelarts

Python处理PPT文件的实用姿势

程一初

Python 自动化 办公

LeetCode1160---拼写单词---Easy

书旅

LeetCode

Mono开始采纳.NET源代码-InfoQ