假设我有一个软件,我想制作跨平台插件.您编译虚拟机的插件,运行我的软件的任何平台都可以运行此代码.
我想知道是否有可能为此目的使用LLVM解释器和字节码.此外,我想知道使用LLVM是否有意义而不是其他东西,也就是LLVM是为什么制作的?
我不确定LLVM是为它而设计的.但是,我怀疑使用LLVM 1还没有做任何事情
基于其他虚拟机的脚本引擎是专门为创建工作:
如果您正在寻找可嵌入的虚拟机:
1包括编译cavascript信息到javascript以在浏览器中运行...
理论上,存在有限的LLVM IR子集,其可以跨各种平台移植.你不应该指定对齐,你不应该指向整数类型的指针,你必须避免内在,等等.这意味着 - 你不能立即使用股票C编译器生成的代码(llvm-gcc,Clang,等等),除非您为其指定一个有限的目标并实现清理LLVM传递.另一个问题是不保证来自不同LLVM版本的bitcode格式兼容.
在实践中,我不会去那里.Mono是一个相当小巧,可嵌入,快速的虚拟机,所有.NET工具堆都可用.VM本身非常低级(只要您不关心可验证性).
小智 5
有VMIR(https://github.com/andoma/vmir),这是一个LLVM bitcode解释器/ JIT引擎,旨在嵌入到其他应用程序中.
免责声明:我是它的作者,它仍然在进行中,但工作得很好.