使用 LLVM IR 实现动态类型语言

Fre*_*TNT -2 c c++ compiler-construction language-design llvm

我正在尝试使用 LLVM C API 为动态语言构建 JIT 编译器,但我坚持实现动态类型,例如在函数定义中,LLVM 需要每个参数的类型,但类型在运行时之前是未知的,基于什么用户通行证,我用谷歌搜索了一段时间,但没有任何关于它的好资源,我也尝试查看 Julia 的源代码,看看他们是如何做到的,不幸的是代码又大又复杂,我不得不到处寻找这样的一个小细节,从我目前看到的情况来看,它们将它们的类型表示为一个空的 LLVM 结构指针和一个保存一些额外数据的 func sig 类型,但我非常不确定它是如何工作的,或者即使我是解释正确,任何资源都可能有帮助,最感谢示例代码,示例不必使用 C API,C++ 也很好,我会以一种或另一种方式自己转换它。

提前致谢。

Dan*_* M. 5

LLVM IR 与此无关。它已经是一种语言。静态类型之一(当然)。它对可以编译的内容没有影响。

有很多方法可以解决这个问题,但最终,它与为任何动态类型语言实现 JIT 编译器没有什么不同。

想想你希望它如何工作。它会如何运作。其他动态类型语言如何处理这个问题。

提示:它们都是类型化的,即使它们只有 3 种类型:Object、String 和 Number,如果不是更少的话。他们只是使用某种方式在运行时找出引用的类型。

您是否有一种现有的语言,或者您正在设计它?如果是前者,那么研究现有的实现/规范,如果是前者——那么你可以做任何你想做的事情,你就拥有了所有的力量。