首页 > 解决方案 > 使用 LLVM IR 实现动态类型语言

问题描述

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

提前致谢。

标签: c++ccompiler-constructionllvmlanguage-design

解决方案


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

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

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

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

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


推荐阅读