C#为什么要形成IL中间代码,而不是直接生成机器代码?

 以前搞c/c++.最近接触C#.
相比c++,C#语言的简洁性非常好。

但有个问题:
C#为什么要形成IL中间代码,而不是直接生成机器代码。
这IL中间代码,除了跨平台,还有别的作用吗?

说支持跨平台,但到目前为止.net仍然只是在WINDOWS平台上应用。
难道以牺牲性能为代价,来支持这个不考普的需求??

=========================================

> > 允许其他的编译器阿  
> > 比如你可以写一个的PHP.NET编译器

你是指不管什么语言,都可以编译成统一的IL中间语言。
生成统一的IL便于CLR运行时解释运行(不管来自什么语言)。

但还没有回答我的问题:为什么要生成统一的IL,而不是直接生成机器码?
这样效率会很高的。

===========================================

> > Windows分为32位和64位两个版本

只是为了两个版本的不同,就以牺牲效率为代价,是否值得?

而且,“编译成32位或者64位”只是程序开发时的一次性的麻烦。
但“JIT自己根据实际平台来做编译”,则每次运行时都要作。是否太不划算了?

也许我理解有误,但觉得以上两点理由并不充分。

微软这么花力气作,一定还有更充分得理由。

==========================================

并且任意一种语言只要符合FCL规范,就可以成为.NET平台中的一份子

当然这也强制的让该语言实现一些.NET的特性(也可能是削减自身的特性)

==========================================

为了多平台应用,所以要生成中间语言的.

==========================================

2次编译,在运行速度上可能会比普通WIN32要慢一些。因为他需要对执行的环境了解的更多。但JIT编译也有一些好处,他可以针对CPU进行代码优化;可以不对那些总是返回错误的BOOL表达试进行编译,减少代码;在运行时,CLR能评估和分析代码执行情况,重新组织以提高分支预测成功率。具体性能差距如何,我想应该不会很大的。

=========================================

微软的白皮书对.NET的定义:Microsoft   .NET   是Microsoft   XML   Web   Services平台。XML   Web   Services允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft   .NET平台提供创建XML   Web   services并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。

微软的核心产品是OS...现在不跨平台是为了OS...现在支持跨平台也是为了OS...他们梦想的终极目标是没有平台没有OS...理解这一点就明白它为什么是战略问题了...

============================================

经过仔细研究,感觉唯一能够解释通的理由就是---安全!

因为按微软的规划,以后的应用程序要从网上付费下载来使用。这样,就带来下载软件的安全与否的问题。
而C#经编译后形成的是中间代码,不可以在本地机器上直接执行。必须经过CLR转换成本地代码后才能执行。
这样,中间码可以顺利通过防火墙。而且,安全性又有CLR来保证。

==========================================

1、平台无关,linux下面就有第三方的运行环境。
2、多语言互操作,C#、VB.Net、C++、J#,还可以集成其他语言。
3、效率还可以,现在硬件便宜(很多客户怎么说的,呵呵。。。)

==========================================

跨语言、跨平台,机器码因机器软硬硬件架构而异,IL相对统一

你可能感兴趣的:(.net,C#,Microsoft,语言,平台,跨平台)