对于自定义字节码VM,使用LLVM / CLANG的程序大小是多少?

我正在评估自定义VM的不同可能性,而我从另一个问题中遗漏了LLVM。由于我还在研究嵌入式语言VM的评估,我现在无法自己测试/检查。我想知道有关LLVM / CLANG的以下信息: 它在Windows上得到了很好的支持吗?还是Solaris? (跨平台对我来说是一个加分) 如果我想用类似C语言编写自己的/自定义VM,我需要在项目中包含什么? (LLVM / CLANG部分或组件等) 我会将编译器与VM分开,原因很明显(不是编写解释器)。所需组件的大小是多少?我可以在程序中构建它们而不是动态链接到它们吗? 我可以避免JIT吗?我想有一个字节码VM,它不一定转换为本机代码。当平台不支持JIT时(例如,具有限制性内存权限且不允许wx / rwx内存映射的系统),这将有所帮助。 我知道clamav防病毒实例使用LLVM / clang支持的字节码来支持动态/运行时签名。但是,我不知道是否存在实现此功能和/或教程或文档的现有工具,它们将指导您完成实现此类操作的过程。 谢谢! :)     
已邀请:
Clang是C语言的解析器,包括C ++。如果您的语言足够C(即,Java不是),那么您可以将语言支持添加到clang,后者知道如何生成LLVM IR。 LLVM不需要JIT,通常是静态链接的。 LLVM提供了执行LLVM IR优化和代码生成的库。 JIT就是生成内存而不是磁盘的代码。 Clang + LLVM的普通用法是作为GCC的直接替代品,为.o文件生成代码。 它有多大取决于你需要什么。你想要所有的优化吗?您是否想要所有目标(与GCC不同,LLVM可以根据需要在一个二进制文件中使用尽可能多的后端构建)。既然你提到了嵌入式,那么一个例子是在手机上使用LLVM的Android:http://android-developers.blogspot.com/2011/02/introducing-renderscript.html Windows得到了很好的支持,你可以使用我们的CMake构建系统或mingw32构建带有MSVC ++的LLVM。 Solaris支持更加不确定,我们会定期使用补丁来修复它,但我暂时还没有看到任何补丁。 最后,您可能需要阅读http://llvm.org/docs/tutorial上的教程。这记录了JITted REPL语言的构造,但静态编译语言的基础是相同的。您可以调用Target.addPassesToEmitFile而不是使用llvm :: JIT对象,并将输出流交给它写入。有关完整工作的示例,请参阅llvm / tools / llc / llc.cpp(它很长;如果您不想支持llc所做的所有选项,则只需要其中的一小部分)。     

要回复问题请先登录注册