【发布时间】:2015-09-18 14:27:28
【问题描述】:
我正在阅读 JAVA 和 C# 之间的 comparison 并且想知道这个声明:
注意:虽然 Java 平台支持解释字节码或 字节码被 JITed 然后本地运行,仅 .NET 平台 支持 C# 代码的本机执行,因为 IL 代码始终 运行前本地编译。
这纯粹是微软的一种营销手段,很难将 C# 部署到 Windows 以外的操作系统上,还是它提供了一些好处,例如性能或安全性?
【问题讨论】:
-
C# 不难部署到其他操作系统(它不是部署的 C#,而是编译器的 MSIL 输出),并且很容易在其他操作系统上使用单声道运行。这真的不是关于营销,而是关于性能,你越接近“金属”,程序运行得越快。无论如何,MSIL 直到运行时才进行 JIT 处理,因此它必须在其 JIT 处理为本机之前至少通过解释器运行一次。
-
问题是倒退的。你说“Java 有一个特性,.NET 没有,.NET没有那个特性有什么引人注目的好处?”这是一个不可能回答的问题;缺少功能并没有带来好处,而是节省了成本。更好的问题是“Java 团队决定花时间和精力实现它的那个特性有什么吸引人的地方?”
-
为了强化@RonBeyer 所说的,引用中的重点是“.NET 平台仅支持 C# 代码的本地执行,因为 IL 代码始终是本地编译的” . C#(作为一种语言)独立于该限制。
-
@Charlie 顺便说一句,你知道这是一个 14 岁的比较吗?
-
你是在问为什么 C# 只支持 JIT 编译,而 Java 也支持解释,还是你是在问为什么 C# 完全不关心 JIT 编译,什么时候可以转而使用 AOT 编译?跨度>