罗斯林的突破性变化列表



在切换到Visual Studio 2015之后,我们注意到在Roslyn中对lambdas编译到MSIL的方式所做的一些更改(在本线程和GitHub上进行了描述)在某些情况下会导致运行时故障。

由于Roslyn显然是.NET的未来,我们希望切换到这项技术,但似乎所有在生产中运行的遗留代码(我们有相当程度的信心它能正常工作)现在都容易出现新的运行时故障。这些库也受到了这个问题的影响(例如Moq)。

由于RyuJIT的问题,我们已经跳过了升级,但我相信Visual Studio 2015与Roslyn进行了大量集成,我认为我们不能简单地手动替换csc.exe(但这是另一个问题)。

那么,是否有一份Roslyn中突破性变化的汇编列表,我们可以参考它来看看我们能期待什么?

(更新)

感谢@NealGafter提供链接。目前可以在这里找到突破性变化的列表:

  • Roslyn Github第7278期:Roslyn的突破性变化列表

这里似乎应该有一些文档:Roslyn编译器规范(GitHub上的Roslyn/docs/compilers)。根据描述:

编译器规范详细说明了Roslyn VB和C#编译器的支持(和半支持)表面积。这包括

  1. 命令行开关及其含义
  2. 打破对以前版本编译器的更改
  3. (故意)违反规范的编译器行为
  4. 语言规范中未描述的编译器功能
    • COM特定功能和其他Microsoft特定功能
    • 影响编译器行为的"众所周知"属性
    • "规则集"文件的语法和语义
  5. 例如,C#和VB之间的互操作性所包含的功能
    • 命名索引器使用来自C#
  6. 编译器行为偏离语言规范的地方
  7. 限制(例如标识符长度)
  8. 每个版本的语言更改历史记录

描述对CodeGen关于lambdas的更改的文档(因为这是我的初始问题)位于roslyn/docs/compilers/CSharp/CodeGen Differents:

非提升Lambda表达式现在作为实例方法在单例显示类上实现。由于委托的入口点是实例"Invoke"方法,因此在运行时将委托调用调度到底层实现方法会更便宜,前提是该方法也是具有与"Invoke."完全相同的形式签名的实例方法。

最新更新