简要说明.Net跨语言和跨平台的原理

在回答这个问题之前我们要了解.Net是什么?

微软的.Net是什么?

微软的 .Net既不是编程语言也不是框架
是类似于 互联网时代、次时代、21世纪、信息时代之类的宣传口号
它是一整套技术体系的统称,或者说它是微软提供的技术平台的代号
包含的内容有
框架体系:.Net Framework、.Net Core、Mono等等
开发语言:C#、VB、F#等等(C#是.Net平台主推的开发语言)
开发工具:Visual Studio、Visual Studio Code 等等
你可以简单理解.Net本质上就是微软为自己的一系列产品取的一个代号
知道.Net是什么后,我们需要进一步了解.Net的作用,或者说微软做.Net的目的?

微软做 .Net平台的目的

1.实现跨语言

只要是面向.NET平台的编程语言(C#、VB、C++、F#等等),用其中一种语言编
写的内容可以无缝地用在另一种语言编写的应用程序中。

2.实现跨平台

一次编译,不需要任何代码修改,应用程序就可以运行在任意有.NET框架实现的
操作系统上,即代码不依赖于操作系统,也不依赖硬件环境
那么.Net如何实现跨语言呢?

.Net如何实现的跨语言?

CLS(Common Language Specification)公共语言规范

.Net专门参考每种语言并找出了语言间的共性,定义了一组规则。
与其说是规则,不如说它是一组 语言互操作的标准规范
只要开发者都遵守这个规则来编码,那么代码就能被任意.Net平台支持的语言所
通用,即可以通过不同的编程语言(C#、VB、J#等等)来创建应用程序。

CTS(Common Type System)公共类型系统

当你需要设计面向.Net的语言时需要遵循一个体系,这个体系就是CTS
刚才提到的CLS公共语言规范就是是CTS公共类型系统的子级
一个编程语言,如果 它能够支持CTS,那么我们就称它为面向.NET平台的语言
CLI(Common Language Infrastructure)
公共语言基础结构
是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准

总结

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

.Net如何实现跨平台?

.Net的跨语言是让各种语言支持.Net的规范CLI(也就是CTS等规范)
早期的.Net系列产品主要是为了给Windows操作系统服务的
并没有跨平台的特性,即使跨语言了
也只是可以使用多语言开发Windows上的应用程序
那么这里就不得不提几个个概念
.Net Framework .Net Core Mono
我们先来认识下他们

.Net Framework

.Net Framework 在2002年推出1.0版本
.NET Framework 是一个可以快速开发、部署网站服务及应用程序的开发框架
是 Windows 中的一个组件,部分开源,主要用于开发Windows下应用程序
包括
公共语言运行时(Common Language Runtime, CLR)
虚拟执行系统
.NET Framework 类库等

.Net Framework的体系结构

制作应用程序

编程语言 + 调用各种类库 进行开发 生成程序集
1. 只要支持CLS公共语言规范的语言都可以用于
开发Windows下的各种应用程序和网站程序
2.BCL(基础类库)和FCL(框架类库)是这个
框架体系中为我们实现好的各种API
3.程序集的表现就是后缀为.dll或者.exe格式的文件
其中包含的最关键信息:
PE头、CLR头(就是一些程序的格式信息,比如入口方法,版本号等等)
CIL代码(通用中间代码)
是介于源代码和机器码之间的代码之后会通过CLR产生机器码
CIL代码你可以理解为由于可能使用不同的代码进行开发,所以会将这些代码翻译为统一规范的中间代码

让应用程序在操作系统上运行

CLR(Common Language Runtime)
公共语言运行时,它是.Net Framework的基础,
所有的.Net技术都是建立在此之上的
它是一个在执行时管理代码的代码,提供内存管理、
线程管理等等核心服务, 就好像一个小型的操作系统一样
所以形象的把它称为“.Net虚拟机” 。
如果想要应用程序在目标操作系统上能够运行
就必须依靠.Net提供的CLR环境来支持
那就必须在操作系统上安装.Net Framework
它会把程序集中的IL(中间代码)翻译成机器码最终在操作系统上运行

CLR主要做的事情

.NetFramework的体系结构总结

.NetFramework
是一个主要用于跨语言开发
Windows操作系统下的
应用程序的框架结构
他并不支持跨平台

.NetCore

.NetCore又是什么

NetCore是2016年推出的.NetFramework的新一代版本
它就像是.NetFramework的兄弟
是.NetFramework的翻版实现,它是一个开源项目
它是基于.NetFramework来进行设计的主要目的就是跨平台
是.Net技术框架组成在Windows、MacOS、类Linux系统下的具体实现
它的原理就是为不同的操作系统实现对应的
CLR公共语言运行时(.Net虚拟机)
这样就可以在不同的平台上
将IL(中间代码)翻译成机器码最终在操作系统上运行了

.NetFrameWork到.NetCore

从前面.NetFrameWork和.NetCore相关内容我们了解到
从并不跨平台的.NetFrameWork在2002年正式问世
到2016年跨平台的.NetCore的诞生
中间.Net平台 有14年的并不跨平台的空窗期
而在这段时间内,难道.Net就并不支持跨平台了吗?
答案当然是否定的,那么我们就不得不提Mono了

Mono

Mono又是什么

Mono是一个由Xamarin公司(已被微软收购)所赞助的开源项目
它基于.Net的CLI(CommonLanguageInfrastructure)公共语言基础结构
提供了微软.NetFrameWork的另一种实现
它相对.NetFrameWork最大的区别就是 具备跨平台的能力
它不仅可以运行在Windows、MacOS、Linux等操作系统
甚至还可以运行在PS3、XBOX、Wii等主机平台上
Mono的1.0版本出现在2004年
也就是说 在.NetCore出现之前,Mono是.Net平台实现跨平台的不二之选

Mono如何实现跨平台

Mono利用
.Net平台制定的 CLI公共语言基础结构规则
利用它我们可以 把很多种语言编译成通用规范的CIL公共中间语言
利用CLR公共语言运行时 ,将这些 CIL公共中间语言转换为
操作系统的原生代码(主要做的就是在各种操作系统上实现了对应的CLR内容)
这样 用各种不同语言编写的逻辑就能够在指定操作系统上运行了
它的这一套规则是在.NetFramework规则上进行的修改和添加

总结如何实现的跨平台?

.NetFramework(2002年发布):
部分开源,主要用于开发Windows平台下应用,包含Windows平台的所有特性
.NetCore(2016年发布):
完全开源,可以针对多个平台开发应用,包含.NetFramework部分特性
Mono(2004年发布):
完全开源,早期乃至现在也是.Net的跨平台解决方案
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值