切换到 Visual Studio 2015 后,我们注意到 Roslyn 中 lambda 编译为 MSIL 的方式发生了一些变化(参见这个线程 and 在 GitHub 上)在某些条件下会引入运行时故障。
由于 Roslyn 显然是 .NET 的未来,我们希望切换到这项技术,但似乎所有已在生产中运行的遗留代码(并且我们有相当程度的信心它可以正常工作)现在很容易出现新的运行时故障。这些是也受此问题影响的几个库(例如例如起订量).
我们已经跳过了 RyuJIT 的升级它的问题,但我相信 Visual Studio 2015 与 Roslyn 高度集成,我不认为我们可以简单地替换csc.exe
手动(但那是另一个问题).
那么,Roslyn 是否有一份重大变更的汇编列表供我们参考以了解我们可以期待什么?
(Update)
感谢@NealGafter 提供链接。目前可以在此处找到重大更改列表:
- Roslyn Github 问题 7278:Roslyn 中的重大更改列表
似乎一些文档应该在这里:Roslyn 编译器规范(GitHub 上的 roslyn/docs/compilers)。根据描述:
编译器规范详细说明了 Roslyn VB 和 C# 编译器支持(和半支持)的表面积。这包括
- 命令行开关及其含义
- 与以前版本的编译器相比的重大更改
- (故意)违反规范的编译器行为
- Compiler features not described by the language specification
- COM 特定的功能和其他 Microsoft 特定的功能
- 影响编译器行为的“众所周知”属性
- “规则集”文件语法和语义
- Features included for interoperability between C# and VB, for example
- 编译器行为与语言规范不同的地方
- 限制(例如标识符长度)
- 每个版本的语言变化历史
描述 CodeGen 关于 lambda 的更改的文档(因为这是我最初的问题)位于roslyn/docs/compilers/CSharp/CodeGen 差异:
非提升 Lambda 表达式现在作为单例显示类上的实例方法实现。由于委托的入口点是实例“Invoke”方法,因此如果此类方法也是具有与“Invoke”完全相同的形式签名的实例方法,则在运行时将委托调用分派给底层实现方法会更便宜。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)