为什么gcc支持Java而不支持C#

时间:2014-09-27 19:38:46

标签: c# gcc

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

2 个答案:

答案 0 :(得分:9)

因为您尚未提交补丁以添加C#支持。

答案 1 :(得分:3)

如果编译器工具链不支持特定语言,那么通常是因为目前对该语言没有足够的兴趣。所以,这本身并不是技术原因 - 只是因为他们不想浪费他们的开发人员。现在是时候了。

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

如果您对使用C#创建静态链接程序感兴趣(而不是专门用于gcc),那么Mono 提供了一个工具(我认为是mkbundle),它可以让你从C#代码创建完全独立的二进制文件。