以前搞c/c++.最近接触C#.
相比c++,C#语言的简洁性非常好。但有个问题,请解释:
C#为什么要形成IL中间代码,而不是直接生成机器代码。
这IL中间代码,除了跨平台,还有别的作用吗?说支持跨平台,但到目前为止.net仍然只是在WINDOWS平台上应用。
难道以牺牲性能为代价,来支持这个不考普的需求??刚刚接触c#,可能有些东西没理解透。请高手解悟!

解决方案 »

  1.   

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

  2.   

    C#编译为IL确实是考虑跨平台。有两个意义,一是跨Windows平台,Windows分为32位和64位两个版本,如果是编译为机器代码,那么就会需要编译成32位或者64位。编译成MSIL则会有JIT自己根据实际平台来做编译。而是跨到其他OS平台上。如果你的MSIL通过了Moma软件的全部检查,那么可以可以执行在Mono平台上面,从而在Linux,UNIX,或者Mac OS X平台上跑了。
      

  3.   

    >>允许其他的编译器阿 
    >>比如你可以写一个的PHP.NET编译器你是指不管什么语言,都可以编译成统一的IL中间语言。
    生成统一的IL便于CLR运行时解释运行(不管来自什么语言)。但还没有回答我的问题:为什么要生成统一的IL,而不是直接生成机器码?
    这样效率会很高的。
      

  4.   

    >>Windows分为32位和64位两个版本只是为了两个版本的不同,就以牺牲效率为代价,是否值得?而且,“编译成32位或者64位”只是程序开发时的一次性的麻烦。
    但“JIT自己根据实际平台来做编译”,则每次运行时都要作。是否太不划算了?也许我理解有误,但觉得以上两点理由并不充分。微软这么花力气作,一定还有更充分得理由。
      

  5.   

    编译成IL中间代码的意义就是微软推出.NET平台的意义
    .NET是Microsoft面向XML Web服务的平台,这种下一代的软件将使用一种统一、个性化的方式将我们的信息、设备和人员紧密联系在一起。请阅读循序渐进的.NET介绍了解它的全貌。
                                                               (以上信息来自http://www.microsoft.com/china/net/overview.mspx)
      

  6.   

    并且任意一种语言只要符合FCL规范,就可以成为.NET平台中的一份子当然这也强制的让该语言实现一些.NET的特性(也可能是削减自身的特性)
      

  7.   

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

  8.   

    》》具体性能差距如何,我想应该不会很大的。差别还是很大的。用c#编的程序慢的要死(相比C++).
    什么时候MS用C#编WORD了,才能说明“差距不大”。
      

  9.   

    Paint.NET我觉得速度就挺不错的...
      

  10.   

    为什么要生成IL中间代码?不只是C#...答案是...微软意图独霸软件世界天下...这是战略问题不是技术问题...
      

  11.   

    微软的白皮书对.NET的定义:Microsoft .NET 是Microsoft XML Web Services平台。XML Web Services允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET平台提供创建XML Web services并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。微软的核心产品是OS...现在不跨平台是为了OS...现在支持跨平台也是为了OS...他们梦想的终极目标是没有平台没有OS...理解这一点就明白它为什么是战略问题了...
      

  12.   

    经过仔细研究,感觉唯一能够解释通的理由就是---安全!因为按微软的规划,以后的应用程序要从网上付费下载来使用。这样,就带来下载软件的安全与否的问题。
    而C#经编译后形成的是中间代码,不可以在本地机器上直接执行。必须经过CLR转换成本地代码后才能执行。
    这样,中间码可以顺利通过防火墙。而且,安全性又有CLR来保证。大家觉得是这样吗?欢迎继续讨论...
      

  13.   

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