Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么.NET代码编译为MSIL?_.net_Cil - Fatal编程技术网

为什么.NET代码编译为MSIL?

为什么.NET代码编译为MSIL?,.net,cil,.net,Cil,首先.NET代码编译为MSIL,然后JIT将其转换为依赖于机器的代码。有谁能告诉我,通过两步编译,所有的好处都有哪些呢?谢谢,原因如下。首先也是最重要的可能是使其跨平台。如果C#或其他.NET语言直接编译为本机代码,则必须为其运行的每个平台重新编译它们。有了虚拟机,所有代码都可以以中间格式保存,您只需要为每个平台编写一个虚拟机实现 此外,通过使用与语言无关的中间语言,您可以使用许多高级语言(C#、VB.NET、Python等),所有这些语言都引用用其他语言编写的程序集。因为它们都编译成同一个东西

首先.NET代码编译为MSIL,然后JIT将其转换为依赖于机器的代码。有谁能告诉我,通过两步编译,所有的好处都有哪些呢?谢谢,原因如下。首先也是最重要的可能是使其跨平台。如果C#或其他.NET语言直接编译为本机代码,则必须为其运行的每个平台重新编译它们。有了虚拟机,所有代码都可以以中间格式保存,您只需要为每个平台编写一个虚拟机实现

此外,通过使用与语言无关的中间语言,您可以使用许多高级语言(C#、VB.NET、Python等),所有这些语言都引用用其他语言编写的程序集。因为它们都编译成同一个东西,所以它们可以无缝地相互协作


还有性能优势。JIT编译器可以专门针对当时运行代码的机器进行积极的优化。我不知道.NET JIT编译器在这个意义上做了多少优化,但在理论上有很大的好处。

答案可以在
  • 可执行文件未绑定到平台。例如,XNA同时面向PPC(Xbox360)和x86处理器。有些程序将在linux或OSX上的Mono上运行

  • 它允许您更好地优化目标机器或替换缺失的功能:

    • 例如,OSX>=10.5在OpenCL运行时编译丢失的GPU指令
    • 假设您在一个不支持浮点的CPU上工作,那么您可以使用JIT来模拟它,而不需要完全重写代码
    • 在将来的某个时候,可以将处理动态地卸载到GPU或其他目标中(我怀疑函数式语言更适合这种情况)

    • 首先从高级语言转换到机器级,这就是.Net平台的设计方式。第一层负责MSIL的高级语言,第二层可以专注于平台的故障和故障,以便将MSIL转换为机器级代码。它主要支持语言互操作性,并且可能在不久的将来,当Mono这样的项目获得更大进展时,它还将提供跨平台支持

      跨平台应用于.NET framework的情况并不多,因为它只在Windows上运行,但仍然是一个有效点+1真的吗?然后解释一下@马特,你能不能解释一下,我怎样才能在不同的平台上运行我的.net代码?意味着如果我想在linux上运行.net应用程序?有可能吗?.NET不应该只在Windows上运行。v1文档说已经提到了这一点。所发生的是,微软没有费心为其他平台实现VMS。而MS.NET只是Windows,它仍然需要考虑在2000、XP、Vista、7和更高版本下翻译API,更不用说X86和X64,再加上X128(如果8支持它),加上任何即将到来的。“Windows”远不是同质的。关于函数式语言断言,你是对的。GPU在某些情况下非常强大。函数式语言使基础设施更容易决定这些情况何时出现。我认为未来更可能是两者的混合,FP+大规模线程并行代码(GPGPU)。好吧,Java在.NET诞生前就已经做到了。所以我只是认为.NET复制了这个想法加州大学圣地亚哥分校帕斯卡分校在20世纪70年代就这样做了,而Java(以及其他许多人)“复制”了它。来吧!:-)