soz*_*oze 5 compiler-construction bytecode llvm clang vm-implementation
我正在评估自定义VM的不同可能性,而我从另一个问题中遗漏了LLVM.由于我还在研究嵌入式语言VM的评估,我现在无法自己测试/检查.我想知道有关LLVM/CLANG的以下信息:
我知道clamav防病毒实例使用LLVM/clang支持的字节码来支持动态/运行时签名.但是,我不知道是否存在实现此功能和/或教程或文档的现有工具,它们将指导您完成实现此类操作的过程.
谢谢!:)
小智 5
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所做的所有选项,则只需要其中的一小部分).