Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么gcc支持Java而不支持C#_C#_Gcc - Fatal编程技术网

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

为什么gcc支持Java而不支持C#,c#,gcc,C#,Gcc,我想知道是否有任何技术原因可以证明gcc支持Java而不支持C。如果我理解的话,Java也是一种解释语言。如果Mono提供了一个C#编译器和一个CIL的实现,为什么不可能创建一个gcc C#编译器,将C#转换为IL,然后静态编译它呢?,因为你还没有提交一个补丁来添加C#支持。如果编译器工具链不支持特定的语言,这通常是因为目前对这种语言没有足够的兴趣。因此,这本身不是一个技术原因——只是他们现在不想在这方面浪费开发人员的时间 从理论上讲,C#不能作为一种静态编译语言来实现,没有什么特别的技术原因。

我想知道是否有任何技术原因可以证明gcc支持Java而不支持C。如果我理解的话,Java也是一种解释语言。如果Mono提供了一个C#编译器和一个CIL的实现,为什么不可能创建一个gcc C#编译器,将C#转换为IL,然后静态编译它呢?

,因为你还没有提交一个补丁来添加C#支持。

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

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


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

功能不会免费出现。现在已经有了mono,FLOSS社区中的很多人都在犹豫是否支持C#和其他微软技术。Java有一段时间是OS风格的,所以这可能就是它获得支持的原因。还有,人们想研究它。非常感谢你的回答。他们永远也得不到它。@Hans:那就解释一下,从那页链接过来。.NET Native破坏了你关于泛型不利于静态编译的论点。当然,它们的运行时实例化,以及所有其他的反射。很好的回答,谢谢你,这就是我想要知道的。@BenVoigt你是对的,这是我角色中非常糟糕的措辞。我会试着重新措辞。