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

tob*_*777 3 c# gcc

我已经看到了这个问题,我想知道是否有任何技术理由可以证明gcc支持Java但不支持C#.如果我理解,Java也是一种解释性语言.如果Mono提供C#编译器和CIL的实现,为什么不能创建一个将C#转换为IL然后静态编译的gcc c#编译器?

Ben*_*igt 9

因为您尚未提交补丁来添加C#支持.


The*_*kis 5

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

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

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

  • .NET Native 破坏了您关于泛型对静态编译怀有敌意的论点。当然,它们的运行时实例化与反射的所有其余部分一起。 (2认同)