我正在制作一个应用程序,我想使用 ExecutionEngine 加载和执行 llvm bitcode。到目前为止,我已经使用通过 clang 编译的非常简单的 C 代码设法做到了这一点。

我的想法是,如果我在这个项目中使用 llvm,那么它可能比语言更不可知,特别是选择 lua/python/javascript。但我对这如何适用于托管或脚本语言感到困惑,因为它们通常与具有资源的平台(例如 GC)相关联。所以我不确定它是如何通过 ExecutionEngine 实际工作的。

因此,作为示例场景,假设用户想要编写一些在我的应用程序中运行的 Python 代码。然后,我希望他们将表示该 python 代码的位代码交付给我,然后我将使用 llvm 的 ExecutionEngine 在我的 C++ 应用程序中运行这些代码。

这可能吗? python可以简单地编译成bitcode然后使用ExecutionEngine运行吗?如果不是,我需要知道什么才能理解为什么不?

最佳答案

经过一些阅读和一些对话后,我相信答案是 ExecutionEngine 本质上像执行 native C 代码一样执行代码。这意味着如果您想在 llvm 之上执行 lua/python/javascript 代码,您将需要实际发送该运行时的位码。然后运行时可以像往常一样解析和执行脚本。

据我所知,这些运行时都没有能力将它们的脚本直接编译成 llvm 位码(目前)。

关于python - llvm 可以从托管语言执行代码吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21168440/

10-11 23:14
查看更多