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

Implementing a dynamic typed language with LLVM IR

本文关键字:类型 型语言 动态 实现 LLVM IR 使用      更新时间:2023-10-16

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

提前谢谢。

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

有很多方法可以做到这一点,但最终,它与为任何动态类型语言实现 JIT 编译器没有什么不同。

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

提示:它们

都是类型化的,即使它们只有 3 种类型:对象、字符串和数字,如果不是更少的话。他们只是使用某种方式在运行时找出引用的类型。

您是否有现有的语言,或者您正在设计它?如果是前者,而不是研究现有的实现/规范,如果是前者 - 而不是你可以做任何你想做的事情,你拥有所有的权力。