Difference between CLR 2.0 and CLR 4.0
我读过无数关于C 4.0新特性的博客、文章和StackOverflow问题。甚至新的WPF 4.0特性也开始公开。我找不到并且想知道的是:
我认为,在内部,大多数变化是针对新的动态语言和并行编程的。但是还有其他的主要改进吗?因为语言的改进就是语言的改进。您只需要新的编译器,这些功能可以与较低版本的.NET一起使用,除了版本1.0/1.1(至少可以使用其中的大部分)。
如果以上功能是唯一的,那么只有这些功能的版本才改为4.0,我认为是4.0,因为它是基于.NET 4.0版本(即1.0/1.1、2.0&3.0/3.5之后)。版本增量是否合理?
编辑:
正如PavelMinaev在评论中指出的,即使这两个特性都是独立于CLR的。3.0和3.5也有速度和其他改进。那么为什么要增加版本呢?
我所知道的一个新的clr事情是,为了支持nopia,接口、结构和委托的一种结构类型——基本上,它允许运行时使用相同的定义来处理不同的类型——因此,如果两个程序集
另一件事是能够在一个进程中并行承载多个CLR版本。例如,不能在一个进程中承载1.x和2.0,但可以承载2.0和4.0。这样做的主要好处是能够同时加载为任意一个clr版本编写的插件。
一个小问题是,更多的例外情况已经变得无法弥补,比如说,
此外,这里还有一个来自pdc 2008的关于clr 4.0的PowerPoint演示。它现在可能有点过时了,但大多数提到的东西似乎都在betas中。
有很多变化。
在CLR本身中,有一些更改。正在更改垃圾收集器,以支持在工作站模式下同时收集gen0/1和gen2。此外,安全性的实现方式也发生了一些变化。并行框架改变了一些clr对threadpool的实现(它不是完全被管理的,而是运行时本身的一部分)。此外,类型系统也发生了一些变化,主要与新的PIA COM支持有关。
最大的变化可能是更多的库/框架更改,而不是clr更改。例如,将DLR集成到框架中,以及新的动态类型。在框架方面,您有反应式框架、并行库扩展、代码契约、元组支持,以及许多小的更改(例如:
对于每个发布文档,团队创建"新增内容"文档。
下面是C 4.0 Beta2的一个:Visual C 2010的新功能
这里是.NET Framework 4.0 Beta2的版本:在.NET Framework版本4中的新功能
这些是您可以找到的最完整的更改列表。
我不相信有任何新的IL指令。新的clr对诸如内联和垃圾收集之类的东西进行了改进,这些改进与2.0 clr执行相同的工作,但效果更好。虚拟机(如clr或jvm)是一个具有多个可能实现的抽象概念。我相信clr 4.0和clr 2.0是同一个抽象机,只是有一个改进的实现。
即使是新的动态的东西也只是一个新API的编译技巧(不像Java,它被提出为一个新的操作码)。
如果我错了,我想知道!
下面是clr 4.0中的更改
- 新安全模型
- 垃圾收集器改进
- 改进了TPL的线程池
- 改进生产诊断
- 一般协方差和反方差
- PIA COM支持的类型系统更改
- 新GAC
clr中的许多核心接口和委托类型都已更新,以支持通用协方差和逆变。例如,
我试着看了一下反射镜里的一些新的C材料,看看下面有没有什么新的东西:
- 动态类型通过编译器magic转换为对象,编译器magic添加库调用以处理运行时绑定。
- 可选参数通过编译器处理。如果调用foo(int x=5),而不指定x的值,则在Reflector中会看到调用为foo(5)。
所以我猜这些变化是你很容易发现的(比如clr 2.0中的通用支持)。