我听说谷歌应用程序引擎可以运行任何编程语言,这些编程语言可以通过它的JVM转换成Java字节码。我想知道是否可以将LLVM字节码转换为Java字节码,因为在Google App Engine JVM中运行LLVM支持的语言会很有趣。
发布于 2012-11-24 18:17:14
现在似乎可以使用LLJVM interpreter将LLVM字节码转换为Java字节码。
kraytracing.com的Grzegorz有一个有趣的Disqus comment (21/03/11),它连同代码一起解释了他如何修改LLJVM class输出例程,以发出在数量上与输入C/C++模块一致的非整体式Java类。他认为他的技术似乎避免了通常由LLJVM生成的过长的“复合”Java构造器方法参数签名,并提供了到他的修改和示例的链接。
尽管LLJVM现在看起来并不像是在积极开发中,但它仍然托管在Github上,一些文档仍然可以在它以前的存储库GoogleCode中找到:
LLJVM documentation @ GoogleCode
我还遇到了'Proteuscc‘项目,它也利用LLVM来输出Java Byte代码(它表明这是专门针对C/C++的,尽管我假设该项目可以修改或提供LLVM中间表示(IR))。来自http://proteuscc.sourceforge.net
使用Proteus生成Java可执行文件的一般过程可以总结如下。
我已经扩展了a bash script to compile the latest versions of LLVM and Clang on Ubuntu,它可以作为一个Github Gist,here找到。
更新31/03/14 - LLJVM似乎已经死了一段时间了,然而Howard Chu (https://github.com/hyc)似乎已经使LLJVM与最新版本的LLVM3.3兼容。请参阅Howard's LLJVM-LLVM3.3 branch at Github, here
发布于 2011-02-08 23:23:58
我怀疑你是否可以,至少在没有大量的工作和运行时抽象的情况下是这样的(例如,构建半台冯诺依曼机器来执行某些操作码)。LLVM bitcode允许完整的低级不安全“做你想做的,但我们不会清理乱七八糟”的功能,从直接的,原始的,无构造函数的内存分配到完全不受检查的强制转换-真实的强制转换,而不是转换如果你愿意,-you可以将i32和bitcast转换为%stuff *。此外,JVM在很大程度上是面向对象和方法的,而LLVM的人则很幸运,他们有函数指针和结构。
另一方面,看起来C can be compiled to Java bytecode和LLVM bitcode can be compiled to Javascript (尽管缺少很多特性,例如动态加载和stdlib函数),所以只要付出足够的努力,这应该是可能的。
发布于 2017-08-29 19:15:47
讨论较晚: Sulong在JVM上执行LLVM IR。它从LLVM IR创建可执行节点( Java对象),而不是将LLVM IR转换为Java字节码。这些可执行节点形成一个AST解释器。你可以在https://github.com/graalvm/sulong上查看这个项目,或者在http://dl.acm.org/citation.cfm?id=2998416上阅读一篇关于它的论文。免责声明:我正在做这个项目。
https://stackoverflow.com/questions/4934707
复制相似问题