7

首先 .NET 代码编译为 MSIL,然后 JIT 将其转换为机器相关代码。谁能告诉我由于两步编译而获得的所有好处。谢谢

4

4 回答 4

20

有几个原因。首先也是最重要的可能是使其跨平台。如果 C# 或其他 .NET 语言直接编译为本机代码,则必须针对它们运行的​​每个平台重新编译它们。使用 VM,所有代码都可以保存为中间格式,您只需为每个平台编写一个 VM 实现。

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

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

于 2009-12-18T05:12:33.207 回答
6

答案可以在MSDN上找到

于 2009-12-18T05:15:21.093 回答
1
  • 可执行文件未绑定到平台。例如,XNA 同时针对 PPC (Xbox360) 和 x86 处理器。一些程序将在 Linux 或 OSX 上的 Mono 上运行。

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

    • 例如,OSX >= 10.5 在运行时使用 OpenCL 编译缺少 GPU 指令。
    • 假设您正在使用不支持浮点的 CPU,那么您可以使用 JIT 模拟它,而无需完全重写代码。
    • 在未来的某个时候,可能会动态地将处理卸载到 GPU 或其他目标中(我怀疑函数式语言更适合于此)。
于 2009-12-18T05:19:34.020 回答
1

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

于 2009-12-18T06:01:40.050 回答