.NET Core之为什么能跨平台?

.NET Core之为什么能跨平台?

  • .NET Framework的几个层次结构
    • 一、CLR公共语言运行时
    • 二、FCL框架类库
    • 三、另一种方式
  • 非Windows下的.NET
    • 什么是CLI?
    • CLI总结
  • .NET Core 跨平台
    • 全新的CLR之CoreCLR
    • 全新的CLR之CoreFX
    • 总结

.NET Framework的几个层次结构

.NET Framework基本上可以分为两大层次:

  1. 提供运行环境的CLR(Common Language Runtime)公共语言运行时。
  2. 为开发人员提供给的API FCL(Framework Class Library)框架类库。

如下图所示:
.NET Core之为什么能跨平台?_第1张图片

一、CLR公共语言运行时

CLR的作用是为程序的执行提供了一个托管的执行环境,他是.NET Framework的执行引擎,为托管程序的执行提供了内存分配、垃圾回收、安全控制、异常处理和多线程管理方面的服务。
CLR是.NET Framework的一个子集,但是两者缺对立了不同的版本。微软截至目前发布了4个版本的CLR:1.0、1.1、2.0、4.0;.NET Framework的1.0和1.1采用的是CLR的1.0和1.1,.NET Framework的2.0和3.x使用的CLR 2.0,.NET Framework 4.x均使用的CLR 4.0。

二、FCL框架类库

FCL是一个为开发人员提供API的类库,它提供的API类库可以分为两个层次:

  1. 面向具体应用类型的API,主要有以下三种类型应用:
    ① 面向应用(比如ASP.NET、WPF和Windows Forms等)
    ② 面向服务(比如WCF、WF和Data Services等)
    ③ 面向数据(比如ADO.NET、Entity Framework和LinQ to SQL等)
  2. 处于最底层的BCL(Basic Class Library)基础类型类库。
    BCL主要用于描述了一些基本的数据类型和数据结构(比如字符串、数字、日期/时间和集合等等)、提供些基础的操作(比如IO、诊断、反射、文本编辑、安全控制、多线程管理等等)。

三、另一种方式

我们可以将FCL的面向应用或者服务类型(比如Windows Forms、WPF、ASP.NET和WCF等)的部分分成AppModel,那么.NET Framework的整体架构可以如下图所示:
.NET Core之为什么能跨平台?_第2张图片

非Windows下的.NET

.NET是通过Mono和Xamarin将其伸展到其他的平台(Linux、Mac、Andriod等)

什么是CLI?

.NET 跨平台其实建立在一个开放的标准或者规范当中,而这个规范就叫做CLI(Common Language Infrastucture)。CLI其实解决的就是:由不同的编程语言开发的.NET应用能够无需任何更改就能运行在不同的系统环境之中。解决这个问题就涉及到了【编程语言的差异】和【运行时环境差异】,编程语言能够相互兼容,运行时环境能够得到统一,跨平台就能得到实现。

CLI(Common Language Infrastucture)分为【Common Language】和 【Infrastucture】
Common Language其实是一种通用语言,为的就是解决编程语言的兼容性问题。
Infrastucture其实是动态执行应用的引擎。
所以CLI就为可执行代码和引擎提供了一个标准。

编程语言有解释型和编译型之分。编译型则需要编译器生成可执行代码,Common Language其实是编译型语言。想要真正实现跨平台,最终目的就是解决可执行代码在不同平台的兼容性与可移植性,但是应用的兼容性和可移植性是编译后结果决定的。如果能将不同的编程语言通过编译器编译成符合标准代码,那么就能解决编程语言之间的差异。

按照CLI标准的规定,可执行代码称为CIL(Common Intermediate Language)的语言,是一种介于编程语言和机器语言之间的中间语言,也是一门OOP语言。

不同编程语言可以通过编译器得到统一,而运行环境则可以通过虚拟机技术解决。虚拟机是CIL的运行容器,它能够在CIL执行的时候动态的将他翻译成与当前环境完全匹配的机器指令。而CIL就是一种虚拟机语言。

CLI总结

由此可见 .NET建立在CLI这一标准之上,所以天生就具备了“跨平台”的基因。

.NET Core 跨平台

要真正实现.NET 的跨平台,主要需要解决两个问题:

  • 一是针对不同的平台设计相应的CLR运行时为中间语言CIL提供一个一致性的执行环境
  • 二是提供统一的BCL以彻底解决代码复用的难题

对于真正跨平台的.NET Core来说,微软不仅为它设计了针对不同平台被成为CoreCLR的运行时,同时还重新设计了一套被称为CoreFX的BCL

NET Core目前支持的AppModel支持有两种,一是.NET Core用于开发服务器Web应用和服务;二是UWP(Universal Windows Platform)用于开发能够在各种客户端设备上自适应的Windows 10应用。

全新的CLR之CoreCLR

这些模块对应这一个单一的程序集,并最终由对应的NuGet包来分发。至于底层的虚拟机,微软则为主流的操作系统和处理架构设计了针对性的运行时就是 CoreCLR

全新的CLR之CoreFX

CoreFX是经过完全重写的BCL,除了自身就具有跨平台执行的能力之外,其提供的API也不再是统一定义在少数几个单一的程序集中,而是经过有效分组之后被定义在各自独立的模块中

总结

作为运行时的CoreCLR和提供BCL的CoreFX是.NET Core两根重要的基石。.NET 能够成长为跨平台的.NET Core 他们是主力军,CoreCLR运行时为.NET Core应用提供了不同平台不同的执行环境;CoreFX为.NET Core提供了彻底解决代码复用的难题。

你可能感兴趣的:(.NET,Core,c#)