编辑
2023-08-31
编程语言
00

目录

.Net是什么
- 开发工具:Visual Studio、Visual Studio Code。
.Net跨语言的实现
CLS
CTS
CLI
跨语言如何实现
.Net跨平台的实现
.NetFramework
Mono
.NetCore
跨平台如何实现

.Net是什么

  • .NET 不是编程语言,也不是框架;是一整套技术体系/平台的统称或代号
  • 包含内容
    • 框架体系:.NET Framework、.NET Core、Mono;
    • 开发语言:C#、VB、F#(C# 为主推);
    • 开发工具:Visual Studio、Visual Studio Code。

平台目标

  • 跨语言:不同 .NET 平台上的语言可无缝互操作。
  • 跨平台:一次编译,应用可在任意有 .NET 框架实现的操作系统上运行。

.Net跨语言的实现

在了解 .Net 如何实现跨语言之前要先了解三个概念,分别是CLS、CTS、CLI; 注意,一般我们所说的 .Net 平台的跨语言都是指面向 .Net 平台设计的语言,C#、VB.NET、F#类似这些语言中进行的。

CLS

  • CLS(Common Language Specification,公共语言规范);微软在总结多种语言共性后提出的一组语言互操作规则;只要公开API遵守CLS,不同 .NET 语言即可互相调用;
  • 并不是“全世界所有语言的通用规则”。它只定义在 .NET 平台内部,为了让面向 .NET 的语言(比如 C#、VB.NET、F# 等)能够互操作而设立的一组规则,如果一门语言不是针对 .NET 平台设计的,那么它不会去遵循 CLS。

CTS

  • CTS(Common Type System,公共类型系统);当你需要设计面向 .Net 的语言时需要遵循一个体系,这个体系就是CTS,刚才提到的CLS公共语言规范就是是CTS公共类型系统的子级
  • 消除“各语言类型体系不一致”带来的互操作障碍,确保所有 .NET 语言在类型与成员语义上说同一种“类型语言”
  • 一个编程语言,如果它能够支持CTS,那么我们就称它为面向 .NET 平台的语言

CLI

  • CLI(Common Language Infrastructure,公共语言基础结构)
  • 微软提交给 ECMA 的工业标准,对 .NET 的关键组成(含 CTS 等)进行标准化;可理解为“让 .NET 语言与实现具备共同语义的标准底座”,以标准形式明确语言互操作与类型系统等基础规则,使不同实现(如 .NET Framework、Mono、.NET Core/现代 .NET)有统一的规范依据。

跨语言如何实现

  • 微软为了实现跨语言,制定了一些规范,只要一门语言支持CTS(公共类型系统)的规则,那么我们就能够使用它在 .Net 平台下开发应用程序;
  • CLS(公共语言规范)是CTS的一个子级,是一组语言互操作的标准规范,我们经常可以看到的CLI公共语言基础结构,它包含CTS公共类型系统,它是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准

dotnet_cross_language.png

.Net跨平台的实现

早期的 .NET(.NET Framework,2002)只服务于 Windows,它解决了跨语言的问题,但是并没有解决跨平台的问题,如果要让同一份 .NET 程序跑在不同操作系统,必须为不同平台实现对应的 CLR(公共语言运行时),那么这就涉及到以下三个核心的概念:

.NetFramework

  • 定位:是一个可以快速开发、部署网站服务及应用程序的开发框架,是 Windows 中的一个组件,部分开源,主要用于开发Windows下应用程序;
  • 特点:包含 CLR:负责内存、线程管理,将 IL 翻译为 Windows下的 机器码;
  • 局限:只能在 Windows 上运行,不跨平台。

Mono

  • 定位:.NET Framework 的第三方替代实现,由Xamarin主导,遵循CLI;
  • 特点:在不同操作系统实现对应 CLR,将语言生成的IL中间代码在不同操作系统下的CLR再翻译为机器码,使得实现跨平台,这是社区的实现
  • 意义:在 .NET Core 出现之前,Mono 是唯一的跨平台方案,Unity早期使用它作为脚本运行时。

.NetCore

  • 定位:新一代 .NET,目标就是跨平台,
  • 特点:完全开源,为不同 OS 提供各自的 CLR,把 IL 翻译为本机码,做法和Mono类似,这完全由官方设计并重新实现

跨平台如何实现

  1. 统一编译产物:所有 .NET 语言先编译为 IL(中间语言)+ 元数据,封装在程序集。
  2. 各平台实现 CLR:不同操作系统安装对应 CLR(Framework/Core/Mono),使 IL 能在本机上运行。
  3. CLR 把 IL 翻译成本机机器码,并提供运行时服务(内存、线程、异常管理等)。

dotnet_cross_platform.png

总结:跨语言靠 IL 统一,跨平台靠各平台的 CLR 实现。

本文作者:xuxuxuJS

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!