是否可以使用 LLVM IR 作为通用语言在编程语言之间进行转换?

Posted

技术标签:

【中文标题】是否可以使用 LLVM IR 作为通用语言在编程语言之间进行转换?【英文标题】:Is it possible to use LLVM IR as a universal language to transpile between programming languages? 【发布时间】:2019-01-08 02:02:23 【问题描述】:

我正在使用一种晦涩难懂的编程语言,它没有像流行语言那样在第三方库方面拥有尽可能多的选项的特权。我使用的语言很灵活,而且很容易修改语言。假设语言是 Common Lisp。让我们还假设 CL 有一个编译器可以编译为 LLVM,并且我想从 CL 使用的语言+库(比如说 C++ 和 OpenCV)也有一个 LLVM 编译器。那么我可以使用 OpenCV 的 LLVM IR 形式作为伪转译吗?

【问题讨论】:

相关:***.com/a/45235544/637669 你到底在问什么?您是否可以通过 LLVM 将 C++ 转换为 Common Lisp?不会。仅仅因为您可以将一种语言编译为 LLVM,并不意味着您可以轻松地将任意 LLVM 代码“反编译”为该语言。如果您想从另一种语言调用 C++ 库,您需要一个 C 接口到您通过该语言的本机 FFI 调用的库,或者您想向您的语言添加特定的 C++ FFI(后者少得多常用方法)。无论哪种方式,您通常都会通过本机代码,而不是 LLVM IR。 【参考方案1】:

这种事情需要结构/对象布局匹配,名称修改匹配(对于具有全局以外命名范围的语言),如果任一/两种语言都有异常,则各种异常处理细节一致,继承/vtables 是以相同的方式处理,并且调用约定必须兼容。可能还有更多,这只是我头脑中的一个快速回答。

如果你不得不问这个问题,我担心简短的回答是“不”。

【讨论】:

我不明白你所说的“如果你必须问这个问题,我担心简短的回答是“不”” 我的意思是,如果你要问,你可能对这些事情不熟悉,那么困难的数量可能太大了。解决其中一些是工作,解决其他一些是艰苦的工作,但是您必须解决所有问题才能使其发挥作用,而解决所有问题对于不熟悉该学科领域的人来说是非常非常艰巨的工作。

以上是关于是否可以使用 LLVM IR 作为通用语言在编程语言之间进行转换?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 clang 编译为 llvm IR

将 LLVM-IR 转换为类似 C 的语言

X86 'cmpps' 指令和 LLVM IR 'fcmp' 指令是不是可以互换?

如何在 LLVM IR 的 switch 指令中使用 char*?

LLVM 之 IR 篇:如何使用 LLVM IR 优化器

Impala中 LLVM 的交叉编译、调用过程