除了javac或微软的.Net编译器之外,有哪些针对JVM或CLR的编译器?为什么我们没有针对JVM或CLR等C,C ++等流行语言的编译器?
答案 0 :(得分:3)
对于.NET,有mono。
fsf Java compiler有GCC作为{{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。