.NET跨平台原理(上篇)

1、.NET Framework层次结构

FCL(Framework Class Library)
BCL(Basic Class Library)
CLR(Common Language Runtime)

FCL:这是一个为开发人员提供的API类库,比如我们经常使用的框架:Windows Forms、ASP.NET、WPF、WCF等。这一层是直接面向开发人员的。

BCL:这是处于底层的类库,提供与操作系统层面交互的代码,如:IO、线程管理

CLR:它为程序提供一个托管的执行环境,是.NET Framework的执行引擎。CLR与.NET的关系等同于JVM与Java的关系,CLR本质上就是.NET的虚拟机。

2、CLI

要实现跨平台,必须解决两种类型的差异:编程语言的差异和运行时环境的差异。只有编程语言之间能够实现相互兼容,运行时环境能够得到统一,跨平台方可实现。CLI旨在解决这样一个问题:由不同高级编程语言开发的.NET应用能够在无须任何更改的情况下运行于不同的系统环境中。

CLI全称:Common Language Infrastructure。其中Common Language指的是通用语言,旨在解决各种高级开发语言的兼容性问题。Infrastructure指的是运行时环境,旨在弥补不同平台之间执行方式的差异。

编程语言分为编译型和解释型两类。前者需要通过编译器实施编译以生成可执行代码,CLI涉及的就是编译型语言。要实现真正的跨平台,最终需要解决的是可执行代码在不同平台之间的兼容和可移植问题。如果不同编程语言经过编译后生成的可执行代码是一样的,那么编程语言之间的差异就不再是一个问题了。

2.1、CIL

按照CLI的规定,用来描述可执行代码的是一种被称为CIL(Common Intermediate Language)的语言,这是一种介于高级语言和机器语言之间的中间语言。虽然程序源文件是由不同的编程语言编写,但是我们可以借助相应的编译器将其编译成CIL代码。从原则上讲,设计新的编程语言并将其加入.NET中,只需要以相应的编译器来生成统一的CIL代码即可。我们也可以设计一个编译器,将java代码编译成以CIL为目标语言。这样说的话,其实编程语言只是表象,目标代码(也称可执行代码)才是本质,因为目标代码是直接与计算机打交道的。下面画个图来说明中间语言的作用吧。

编程语言的差异化通过编译器得以统一化,运行环境的差异则可以通过虚拟机(VM)技术来解决。虚拟机是CIL的执行容器,能够在执行CIL代码的过程中采用即时编译的方式将其动态地翻译成与当前执行环境完全匹配的机器指令。虚拟机屏蔽了不同操作系统之间的差异,使目标程序可以不做任何修改就能运行在不同的底层执行环境中。

那按照这个逻辑,.NET应用程序应该可以在非windows平台运行啊,为什么在非windows平台还是无法运行呢?我个人的理解是:微软没有实现非windows平台的虚拟机,也就是CLR。也就是说微软只实现了windows平台的CLR,所以.NET应用程序只能在windows平台执行。

 

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值