我正在开发一个用 C++ 编写的高性能系统。该过程需要能够在运行时理解一些复杂的逻辑(规则),这些逻辑(规则)是用为此应用程序开发的简单语言编写的。我们有两个选择:
解释逻辑 - 运行嵌入式解释器并生成动态函数调用,当接收到数据时,根据解释的逻辑对数据进行处理
将逻辑编译成plugin.so动态共享文件,使用dlopen、dlsym加载插件并在运行时调用逻辑函数
选项 2 看起来非常有吸引力,因为它将优化机器代码,在此过程中运行速度比嵌入式解释器快得多。
我正在探索的选项是:
- 编写编译方法 string compile( string logic, list & errors, list & warnings )
- 这里的输入逻辑是一个字符串,包含用我们的自定义语言编码的逻辑
- 它生成llvm ir,compile方法的返回值返回ir字符串
- 写链接方法 bool 链接(字符串 ir,字符串文件名,列表和错误,列表和警告)
- 对于链接方法,我搜索了 llvm 文档,但我无法确定是否有可能编写这样的方法
如果我是正确的,LLVM IR 将转换为 LLVM 字节码或汇编代码。然后要么使用 LLVM JIT 在 JIT 模式下运行,要么使用 GNU Assembler 生成本机代码。
是否有可能在 LLVM 中找到一个可以做到这一点的函数?如果这一切都是从代码中完成的,而不是使用 C++ 中的系统命令来调用“as”来为我的要求生成 plugin.so 文件,那就更好了。
如果您知道我可以在运行时从我的进程生成共享库本机二进制代码的任何方法,请告诉我。