【发布时间】:2012-06-23 06:36:20
【问题描述】:
我从去年 10 月开始观看 Microsoft 构建会议,我注意到他们宣布,为了构建新的 Metro 风格应用程序,开发人员可以使用 C# 编写本机代码。这怎么可能?我只是好奇。 C# 不是设计为(作为 CLI 标准的一部分)首先编译为中间字节码,然后在虚拟机上运行吗?运行在虚拟机上的东西怎么能叫做“原生代码”呢?
【问题讨论】:
-
字节码是虚拟机原生的;这就是整个想法
-
C# 是一门语言。你认为它有一些神奇的基础可以防止它被编译为本机代码吗?它不必在虚拟机上运行。
-
你错了。 WinRT 为开发人员开辟了一条使用 C/C++ 而不是 C# 编写本机代码的开发路径。 C# 中的本机 (x86) 代码开发是不可能的,除非有人不厌其烦地编写编译器来做到这一点。用 C# 编码的 WinRT 应用程序仍然使用 .net 并在 CLR 上运行。
-
取决于您对“本机代码”的解释。并没有真正的固定定义,并且该术语的使用非常宽松。
-
@Ayush JVM 的存在是有原因的。 Java 的最大卖点之一是 JVM。只要有人在你的机器上编写和编译一个JVM,你就可以在任何地方执行编写的Java代码。这意味着您不必为每种架构编写编译器,并且编译器在不同机器上的工作方式可能不同。相反,您编写了一个 JVM,并且您可以相当确定您在其他地方编写的代码将运行相同的代码。此外,还存在用于机器代码的 Java 编译器。 See this Wiki page
标签: c# virtual-machine bytecode native-code managed-code