CLR 这些年来甚转吗?

引言

率先想给新家推荐下《CLR via
C#》这本好题,做.Net开发的开发者应该都念一下。为避免广告的嫌,所以这里仅仅供豆瓣书评的链接。

CLR 作为.Net
程序跨平台运行的载体,和Java的JVM有着类似之效益(JAVA也超平台若雅,实现就无异于靶距离不上马JVM)。

随着.NET
Framework的逐月发展CLR也起日新月异的变通。这些变迁也开带来双重多立竿见影之表征,在增长支付效率的而也加强了次的特性及安居。

 

苟大家认为还有必要把这块更新的又好,还请多反馈。

一经苏的对你来因此还呼吁点击
“推荐”下,我会持续创新更多新的情。

CLR是什么

通用语言运行时(CommonLanguageRuntime,CLR)最早让誉为下一代Windows服务运行时(NGWS
Runtime).它是直接建立在操作系统及之一个虚拟环境,主要的天职是管制代码的运行。

CLR在.NetFramework中的岗位

 

图片 1

.NET平台结构图

 

CLR现在支持几十栽现代底编程语言也她编写代码,然后为同一种中语言(Intermediate
Language
,IL)代码的变异于执行。并且,CLR还提供了无数功效以简化代码的开销以及动用配置,同时为改善了应用程序的可靠性。如您所理解,如果某种语言的编译器是以运行时也目标的,那么用该语言开发生成的代码在.NET中为誉为托管代码(MSIL),因为这样的代码是一直运行于CLR上之,所以有跟平台无关的特点。

 

眼下时有发生什么语言支持CLR

微软曾经也多种语言开发了基于CLR的编译器,这些语言包括:C++/CLI、C#、Visual
Basic、F#、Iron Python、 Iron Ruby和IL。

除此之外,其他的一些商家与大学当单位也个有语言开发了基于CLR的编译器,例如Ada、APL、Caml、COBOL、Eiffel、Forth、Fortran、Haskell、Lexicon、LISP、LOGO、Lua、Mercury、ML、Mondrian、Oberon、Pascal、Perl、PHP、Prolog、RPG、Scheme、Smaltak、Tcl/Tk。

 

 

在.NET平台结构图中,CLR的点是.NET的基类库,这组基类库包括由中心输入输出到数码访问等各国地方,提供了一个统一的面向对象的,层次化的,可扩大的编程接口。从.NET平台结构图备受为足以望,基类库可以吃各种语言调用和扩展,也就是说不管是
C#,VB.NET还是F#,VC++.NET,都可无限制之调用.NET的类库。

CLR内部结构

 

图片 2

 

由上图可以看看CLR提供的功效,如类型安全(Type Checker)、垃圾回收(Garbage
Collector)、异常处理(Exception Manager)、向下兼容(COM
Marshaler)等,具体的游说,.NET上的CLR为开发者提供如下的服务:

  • 阳台无关:CLR实际上是提供了同等码用了虚拟机技术之活,他在操作系统之上,并无求程序的运行平台是
    Windows系统,只要是会支持其的周转库底网,都可以在上面运行.NET应用。所以,一个净出于托管代码组成的应用程序,只要编译一糟糕,就得以任何支持.NET的阳台上运行.(从Mono的起转移得尤为实事求是啦,不用再羡慕JAVA啦)
  • 跨语言集成:CLR语序开发这为其它语言进行付出,用这些语言开发的代码,可以以CLR环境下紧密无缝的进行交叉调用,例如,可以据此VB声明一个基类对象,然后于C#代码中直接开立次基类的派生类。
  • 机关内存管理:CLR提供了劝解收集体制,可以自动管理内存。当目标要变量的生命周期结速后,CLR会自动释放他们所占有的外存.
  • 跨语言异常处理
  • 版本控制(避免了DLL灾难)
  • .NET安全
  • 粗略的组件互操作性
  • 于描述组件:自描述组件是凭用所有数据及代码都居一个文件中之推行文书。自描述组件可以大大简化系统的支付以及安排,并且改进系统的可靠性。

 

补充:世家好看下自家总的同样首关于GC的有的事物(GC
快餐热卖)

 

CLR 执行示意图

图片 3

 

CLR 于整个.Net Framework 程序执行过程的范,C#、VB.Net,C++.Net
代码通过编译器生成了MSIL(托管代码),然后CLR用JIT翻译成native code
,最后就是好一直实施啦。

 

 

CLR 版本发展史

图片 4

 

C#版本 和.Net Framework 版本和CLR依赖关系 和新特色添加列表,

 

The .NET Framework 4.5 is an in-place update that replaces the .NET
Framework 4 on your computer, and similiarly, the .NET Framework 4.5.1
4.5.2, and 4.6 RC are in-place updates to the .NET Framework 4.5,
which means that they use the same runtime version, but the assembly
versions are updated and include new types and members. After you
install one of these updates, your .NET Framework 4 or .NET Framework
4.5 apps should continue to run without requiring recompilation.
However, the reverse is not true. We do not recommend running apps
that target a later version of the .NET Framework on the .NET
Framework 4.5.

面的一体化意思就是是:

  • .NET Framework 4.5 是.NetFramework 4.0之代替者
  • .NET Framework 4.5.1 4.5.2, and 4.6 RC 是.NetFramework 4.5底代替者

从.net 4 开始,如果你想管.NetFramework 4.0+
到更新的换代版本的.NetFramework,只需要重新指定目标.Net
Framwork然后再也编译代码即可,反的不可行。

就此得以这么做是盖马上几乎单.NetFramework版本的CLR都是4.0本子的。

The .NET Framework versions 2.0, 3.0, and 3.5 are built with the same
version of the CLR (CLR 2.0). These versions represent successive
layers of a single installation. Each version is built incrementally
on top of the earlier versions. It is not possible to run versions
2.0, 3.0, and 3.5 side by side on a computer. When you install version
3.5, you get the 2.0 and 3.0 layers automatically, and apps that were
built for versions 2.0, 3.0, and 3.5 can all run on version 3.5.
However, the .NET Framework 4 ends this layering approach. Starting
with the .NET Framework 4, you can use in-process side-by-side hosting
to run multiple versions of the CLR in a single process. For more
information, see Assemblies and Side-by-Side
Execution.aspx).

In addition, if your app targets version 2.0, 3.0, or 3.5, your users
may be required to enable the .NET Framework 3.5 on a Windows 8 or
Windows 8.1 computer before they can run your app. For more
information, see Installing the .NET Framework 3.5 on Windows 8 or
8.1.aspx)

当时段话的意思是

  • .NET Framework versions 2.0, 3.0, and 3.5
    每个版本都是于前边一个本基础及增量开发之
  • .NET Framework versions 2.0, 3.0, and 3.5
    不同版本的次第不克以同一机器上而运行于不同CLR上。(在设置 3.5 版后,你用任需安装 2.0
    和 3.0 版本,2.0、3.0 和 3.5 生成的应用程序均只是每当 3.5
    版上运行)
  • 由 .NET Framework 4
    开始,在单个进程遭到不过采取过程内相互运行在多单版的CLR 。(即4.0底dll引用了2.0的dll是,4.0的代码在CLR4.0上运行而2.0之代码运行在CLR2.0上)
  • 另外,如果您的应用程序使用的凡 2.0、3.0 或 3.5
    版,你的用户或得事先以(Windows7) Windows 8 或 Windows
    8.1计算机及启用 .NET Framework 3.5,然后才会运行应用程序。

 

Update2:因@yubinfeng唤醒,注释下:3.5底Framework都于Win7随后的本子中网自带,只是默认不启用,需要常开【控制面板】->【程序及效益】->[开辟或关闭Windows功能]->打开.NetFramework
3.5效能即可。(安装.netframework
不是本文的最主要,如得重新详尽的牵线自行检索下)

 

 

顺便看下 各个.Net Framework 新成效:

 

图片 5

CLR最新发展

图片 6

未来.NEtFrameWork 会有新的兄弟进入一起构建.Net 跨平台和云架构的希。

图片 7

达成图中Core CLR是Asp .Net
vNext很关键的主干之一,虽然官方没有说,但差不多就是是一个精简版的CLR,拿掉了绘图等效果,让Server和Cloud程序还便捷

有关MonoCLR,大家看名字就是了解凡是为重新好之支撑Mono这个开源之新秀的。

 

Update1:摘自MSDN的《使用 CoreCLR 编写
Silverlight》

自 2005 年 10 月发行 CLR 的 2.0 版本后即使开了 CoreCLR
的设计。它的鲜独重要设计目标是大大小小以及兼容性:从编程人员的角度来拘禁,针对
CLR 的编码应该尽同,而自用户之角度来拘禁,下载必须十分小。由于
Silverlight 旨在提供平等组不同于桌面 CLR
的方案,因此,我们得以开展有转移,以简化 CoreCLR 并允许我们减少
Silverlight
的安大小。但是,堆栈底部的一致性至关重要。行为差异(即使这些表现差异还没错)表明堆栈上部有错误。

以保证兼容性,我们于 style=”background-color: #ffff00;”>堆栈底部的顺序零部件中以同一之代码。执行引擎和虚拟机都是同样的。其中囊括项目系统以及正数据、垃圾回收器
(GC)、JIT 编译器、线程池以及运行时发动机的其它核心部件。

不过,为了适应 Web 应用程序方案,进行了一些转移。例如,富 Internet
应用程序通常简单且运行时刻短, style=”background-color: #ffff00;”>JIT
编译器主要注重于减少启动时,而无执行还扑朔迷离的优化操作。同样,服务器垃圾回收模式可以对运相似分配模式的差不多只干活线程进行优化,而针对
Web 托管应用程序则不算。因此,Silverlight
只含对交互式应用程序进行优化的正经工作站 GC。但是,在 Silverlight
应用程序中采取 Microsoft 中间语言 (MSIL)
和元数据的措施以及以对桌面的托管应用程序中的下方法完全相同,而且应用程序的一言一行于用户之桌面上与当浏览器上亦然。

实则,Silverlight 并无打算取代桌面
CLR,这就算掀起了中心引擎中极其深之转: style=”background-color: #ffff00;”>CoreCLR 将和桌面 CLR
进程并行运行。

GitHub 上的开源库CoreCLR

参考

公共语言运行时
(CLR).aspx)

.NET Framework Versions and
Dependencies.aspx)(MSDN关于.NetFramework
各个版本和系统的倚重关系)

The Future of .NET in the Server: ASP.NET vNext optimized for Cloud and
Server
workloads

.NET Versioning and Multi-Targeting – .NET 4.5 is an in-place upgrade
to .NET
4.0

ntroduction to the Common Language Runtime
(CLR)

魅力 .NET:从 Mono、.NET Core 说起

釐清 CLR、.NET、C#、Visual Studio、ASP.NET
各版本之間的關係

后记

2015-7-12 :

更新了有关CoreCLR 部分介绍

补偿加了关于.NetFramework 3.5的当Win7,8,8.1管需安装,只待启用该意义即可

相关文章