Closed. This question is opinion-based。它当前不接受答案。












想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

已关闭6年。



Improve this question




我有seen this question,我想知道是否有任何技术上的理由来证明gcc提供了对Java的支持但不支持C#。据我了解,Java也是一种解释语言。如果Mono提供了C#编译器和CIL的实现,为什么不能创建一个将C#转换为IL然后静态编译的gcc C#编译器呢?

最佳答案

如果编译器工具链不支持特定语言,通常是因为暂时对该语言没有足够的兴趣。因此,这本身并不是技术上的原因-只是他们暂时不想在此方面浪费开发人员的时间。

从理论上讲,C#不能被实现为静态编译语言,这没有特殊的技术原因。但是,实际上,泛型是C#的核心优势之一,但是不幸的是,由于泛型在这种特定语言中的工作方式,因此它们的任何有效实现通常都受益于JIT编译器的存在。在C#中定义泛型类型时,可以有效地为其类型参数为类的所有具体类型获取一段机器代码,并为每种使用的结构类型获取一条机器代码。但是,当您尝试跨另一个二进制文件创建新的具体类型时,创建这些类型参数所需的新机器代码的最有可能的盟友是JIT编译器。

但是,如果您有兴趣在C#中创建静态链接程序(而不是在gcc中专门创建),那么Mono确实提供了一个工具(我认为是mkbundle),该工具可让您从C#代码创建完全独立的二进制文件。

关于c# - 为什么gcc支持Java但不支持C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26078437/

10-17 02:28