罗斯林的重大变化清单

时间:2015-11-27 09:58:14

标签: visual-studio-2015 roslyn csc

在切换到Visual Studio 2015之后,我们注意到在Roslyn中如何将lambdas编译为MSIL(在this threadon GitHub中描述)的某些更改会在某些条件下引入运行时故障。

由于Roslyn显然是.NET的未来,我们希望转而采用这种技术,但似乎所有已经在生产中运行的遗留代码(以及我们对其正确运行的信任程度很高)现在容易出现新的运行时故障。这些是受此问题影响的几个库(如Moq, for example)。

我们已经跳过了升级到its issues的RyuJIT,但我相信Visual Studio 2015与Roslyn紧密集成,我认为我们不能手动替换csc.exe(但是& #39; s a different question)。

那么,Roslyn中是否有一个包含重大变化的汇编列表,我们可以参考这些变化来看看我们可以期待什么?

1 个答案:

答案 0 :(得分:3)

(适用更新)

感谢@NealGafter提供链接。目前可以在此处找到重大更改列表:

似乎有些文档应该在这里:Roslyn Compiler Specification (roslyn/docs/compilers on GitHub)。根据描述:

  

编译器规范详细介绍了Roslyn VB和C#编译器支持(和半支持)的表面区域。这包括

     
      
  1. 命令行开关及其含义
  2.   
  3. 重置以前版本编译器的更改
  4.   
  5. (故意)违反规范的编译器行为
  6.   
  7. 语言规范未描述的编译器功能      
        
    • 特定于COM和其他Microsoft特有的功能
    •   
    • 影响编译器行为的“众所周知的”属性
    •   
    • “规则集”文件语法和语义
    •   
  8.   
  9. 包括用于C#和VB之间的互操作性的功能      
        
    • 命名索引器使用C#
    •   
  10.   
  11. 编译器行为与语言规范不同的地方
  12.   
  13. 限制(例如标识符长度)
  14.   
  15. 每个版本的语言变更历史
  16.   

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

  

非提升的Lambda表达式现在作为单例显示类的实例方法实现。由于委托的入口点是实例“Invoke”方法,因此如果此类方法也是一个与“Invoke”具有完全相同的正式签名的实例方法,则在运行时将委托调用分派给底层实现方法会更便宜。