除了javac或微软的.Net编译器之外,有哪些编译器可用于JVM或CLR?

时间:2012-02-12 12:53:06

标签: java .net compiler-construction jvm clr

除了javac或微软的.Net编译器之外,有哪些针对JVM或CLR的编译器?为什么我们没有针对JVM或CLR等C,C ++等流行语言的编译器?

4 个答案:

答案 0 :(得分:3)

对于.NET,有mono

fsf Java compilerGCC作为{{3}}的一部分。

至于为什么没有从C / C ++到JVM / CLR的编译器的现有编译器 - 不确定是这种情况,但除了大量不同的内存模型之外,你需要回想一下这些语言也是部分指定的通过附带的库(比如libc) - 它们不小,也需要转换,也不是一个小小的壮举。

答案 1 :(得分:3)

维基百科有很好的信息:

  

为什么我们没有针对JVM或CLR等C,C ++等流行语言的编译器?

嗯,有C ++ / CLI。链接:

答案 2 :(得分:1)

存在大量编译成字节代码的编译器,特别是在Java世界中,字节代码级别处于非常高的级别,因此编写编译器相对容易。

对于C,问题在于编译程序所需的机器抽象是在 lower 级别上,而不是由JVM提供的。例如。要使指针算法工作,你必须拥有一个大块的内存,其中所有东西都放置在世界的Java视图中,作为许多独立的对象。

但是,可以这样做。 NestedVM通过使用自定义运行时库将C程序编译到MIPS-CPU来解决这个问题。然后直接解释生成的代码或字节代码。

答案 3 :(得分:0)

RemObjects具有用于JVM和.NET的Oxygene编译器(也称为Pascal for Java和.NET)。

http://www.remobjects.com/oxygene/

Microsoft确实有用于CLR的VC ++编译器,但这是C ++(C ++ / CLR)的扩展。由于这个事实,没有人试图为JVM定制C ++(据我所知)。

C不是OO语言,因此除非经过大量定制(如C ++ / CLR),否则它不适用于JVM或CLR。