是否可以在我的软件中嵌入LLVM Interpreter并且有意义吗?

时间:2011-11-08 16:44:57

标签: interpreter llvm

假设我有一个软件,我想制作跨平台插件。您编译虚拟机的插件,运行我的软件的任何平台都可以运行此代码。

我想知道是否有可能为此目的使用LLVM解释器和字节码。另外,我想知道使用LLVM是否有意义而不是其他东西,即LLVM是为什么制作的?

5 个答案:

答案 0 :(得分:7)

我不确定LLVM是否为设计。但是,我怀疑使用LLVM 1

还没有做任何事情

为作业专门创建的其他基于虚拟机的脚本引擎

如果您正在寻找可嵌入的虚拟机:

  • IKVM支持在桥接模式下嵌入JVM和CLR(可互操作)
  • Parrot支持嵌入(并包含一个Python解释器;请注意,你可以运行python字节码图像)
  • Perl具有类似的架构并支持嵌入
  • Javascript支持嵌入(不确定v8的架构,但我猜它会使用虚拟机)
  • Mono的CLR引擎支持嵌入:http://www.mono-project.com/Embedding_Mono

<子> 1 包括将c ++信息编译为javascript以在浏览器中运行...

答案 1 :(得分:5)

理论上,存在一个有限的LLVM IR子集,可以在各种平台上移植。你不应该指定对齐,你不应该指向整数类型的指针,你必须避免内在,等等。这意味着 - 你不能立即使用股票C编译器生成的代码(llvm-gcc,Clang,等等),除非您为其指定一个有限的目标并实现清理LLVM传递。另一个问题是不保证来自不同LLVM版本的bitcode格式兼容。

在实践中,我不会去那里。 Mono是一个相当小巧,可嵌入,快速的虚拟机,所有.NET工具堆都可用。 VM本身非常低级(只要您不关心可验证性)。

答案 2 :(得分:5)

VMIR(https://github.com/andoma/vmir)是一个LLVM bitcode解释器/ JIT引擎,旨在嵌入到其他应用程序中。

免责声明:我是它的作者,它仍然在进行中,但工作得很合理。

答案 3 :(得分:2)

LLVM包含interpreter,因此如果您可以为目标平台构建此解释器,则可以动态评估LLVM bitcode。

但显然不是那么快。

答案 4 :(得分:0)

在他们的classic discussion(你不想错过,如果你是开源,LLVM,编译器的粉丝)关于LLVM与libJIT,这已经发生在LLVM成名并建立之前很久,作者libjIT Rhys Weatherley提出了这个特殊问题,他说LLVM不适合嵌入,而LLVM的作者Chris Lattner说,否则,它是模块化的,你可以以任何可能的方式使用它,包括只嵌入你的部分需要。