.Net跨平台和.Net Framework和mono

.Net Framework程序是怎么运行的

  我们用高级编程语言(C#、VB.NET、C++、Python等)编写应用程序,但是计算机是不认识这个的,计算机只认识机器语言,那么为了让我们的应用程序运行起来,我们需要将我们的高级语言转换成机器语言,这个转化的过程不是直接完成了,而是要经过一个“第三者”,叫做MSIL(微软中间语言),现在已经改为CIL(Common Intermediate Language,公共中间语言),而CIL符合CLS(Common Language Specification,公共语言规范),CLS是CTS(Common Type System,通用类型系统)的一个子集,所有.NET语言都应该遵循此规则才能创建与其他语言可互操作的应用程序,对于CLS以及CTS的认识我也只是停留在这是一套规范,它使得.Net上不同语言能够轻松交互一样,例如C#编写程序时可以直接引用并使用VB.NET编写的类库。回到我们刚才,这个从高级语言到CIL的这个过程就是我们说的编译。不同的语言有不同编译器,但是最后的结果都是将高级语言编译为中间语言CIL。
  当我们将高级语言编译为中间语言后,我们需要引入一个新的概念:CLI(Common Language Infrastructure,公共语言基础),CLI是一套ECMA定义的标准,它定义了一个和语言无关的跨体系结构的运行环境,这使得开发者可以用规范定义内各种高级语言来开发软件,并且无需修正即可让软件运行在不同的计算机体系结构上。针对这个标准,微软实现了CLR(Common Language Runtime,公共语言运行时),因此CLR是CLI的一个实现。而我们的从中间语言到机器语言这一步骤就是在CLR基础上完成的。

CIL(Common Intermediate Language,公共中间语言)

  通常情况下公共中间语言(CIL)会被存储到.il文件中,可是我们在编译的时候好像并没有看到这个文件的生成啊,这是因为生成的可执行文件(.exe)本质上是公共中间语言(CIL)形态的可执行文件。这里我们想要说明的是,这里生成的可执行文件(.exe)从本质上来讲并非是一个可执行文件。因为它能否执行完全是取决于CPU的,这和我们直接用C++编写的应用程序不同,我们知道不同的编译器如Windows下的VC++和Linux下的GCC都是和硬件紧密相连的,所以我们编译的程序能够在各自的平台直接运行,即CPU是认识这些程序的。可是在.NET这里就不一样了,因为我们通过C#编译器即csc.exe编译出来的文件,其实是一个看起来像可执行文件,实际上却是一个和平台无关、和CPU无关的IL文件。

.Net跨平台

  根据上面的过程,所以我们可以这样理解.NET跨平台,因为IL文件是一个和平台无关、和CPU无关的、跨平台的文件结构,所以我们只需要在不同的平台上实现这样一个公共语言运行时(CLR)就可以实现在不同的平台上运行同一个程序,但是我们需要有一个C#编译器负责将C#代码转换为IL代码,然后需要有一个公共语言运行时(CLR)来解析IL代码。与此同时,我们在.NET框架下使用了大量的基础类库,这些类库在Windows以外的平台是没有的,所以除了C#编译器和公共语言运行时以外,我们还需要基础类库。
  所以.Net跨平台需要做的就是编辑器CLR,以及基础类库

mono

  所以mono做的就是实现了这3个东西,他实现了编译器、运行时和基础类库这三部分的跨平台,其实就相当于一个跨平台的.Net框架,和 .Net Framework平级。

配图说明

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值