混合语言我指的是由混合编译器(如Java)编译的语言。我理解它是不切实际的,因为C被设计为易于映射到机器指令,但我不知道为什么有人不能为它编写混合编译器。
答案 0 :(得分:0)
许多架构都存在C编译器。 Java使用的字节码可能只是被视为一个指令集,为什么不可能?可能指针不是“真正的指针”,而是一些内部VM引用。
曾经是axiomsol提供的商业编译器,但现在它的所有链接都显示为死(404)。
将C编译成Java代码然后编译Java是可能的,但许多人认为似乎真的以次优的方式解决了。使用byte [],您甚至无法一次读取整数。 C可能会从它自己的虚拟机中受益更简单(因为不需要垃圾收集器)。或者,至少,C必须直接编译成字节码。谁知道C井可以调查可能提供有趣开端的JamVM项目。它是一个运行Java字节码的简单虚拟机。
答案 1 :(得分:0)
创建一个专为运行C而设计的自定义虚拟机当然可以工作,并且运行良好,1-1将许多字节代码指令映射到实际的CPU指令,并且因此也简单快捷JITing 。实际上,LLVM实际上非常像这样。
执行C编译器定位JVM可能需要使C堆成为Java byte []数组,指针将成为此数组的索引。堆栈中的C变量也可能需要使用模拟的byte []堆栈完成,因为必须能够获得指向它们的指针(与堆指针兼容)。
这是必需的,因为使用直接Java引用,在C中执行指针算法和整数指针转换是不可能的。优化这一点的一个选项可能是使C char为32位,这是C标准所允许的,但它会使C实现非常难以用于处理例如文本文件,或任何真正的字节数据......无论如何,C编译为Java字节码会非常慢,因为Java字节码不能做很多C事情“原生地”使用单字节代码指令。