使用 LLVM IR 实现动态类型语言
Implementing a dynamic typed language with LLVM IR
我正在尝试使用 LLVM C API 为动态语言构建 JIT 编译器,但我一直坚持实现动态类型,例如在函数定义中,LLVM 需要每个参数的类型,但是根据用户传递的内容,直到运行时才知道类型,我在谷歌上搜索了一段时间,但在任何地方都没有任何好的资源,我也尝试查看 Julia 的源代码以了解他们是如何做到的,不幸的是代码又大又复杂我必须四处张望才能找到这么小的细节,从我目前看到的情况来看,它们将它们的类型表示为一个空的 LLVM 结构指针和一个包含一些额外数据的 func sig 类型,但我非常不确定它是如何工作的,或者即使我解释正确,任何资源都可以提供帮助,非常感谢示例代码,该示例不必使用 C API,C++ 也可以,我会转换这是我自己的一种方式。
提前致谢。
LLVM IR 与此无关。它已经是一种语言。静态类型的(当然)。它对可以编译成它的内容没有影响。
有很多方法可以解决这个问题,但最终,它与为任何动态类型语言实施 JIT 编译器没有什么不同。
考虑一下您希望它如何工作。它会如何运作。其他动态类型语言如何处理这个问题。
提示:它们都是类型化的,即使它们只有 3 种类型:Object、String 和 Number,如果不是更少的话。他们只是使用某种方法在 运行 时间找出引用的类型。
您是否正在考虑现有的语言,或者您是否正在设计它?如果是前者,那么研究现有的 implementations/specifications,如果是前者 - 那么你真的可以做任何你想做的事,你拥有所有的力量。
我正在尝试使用 LLVM C API 为动态语言构建 JIT 编译器,但我一直坚持实现动态类型,例如在函数定义中,LLVM 需要每个参数的类型,但是根据用户传递的内容,直到运行时才知道类型,我在谷歌上搜索了一段时间,但在任何地方都没有任何好的资源,我也尝试查看 Julia 的源代码以了解他们是如何做到的,不幸的是代码又大又复杂我必须四处张望才能找到这么小的细节,从我目前看到的情况来看,它们将它们的类型表示为一个空的 LLVM 结构指针和一个包含一些额外数据的 func sig 类型,但我非常不确定它是如何工作的,或者即使我解释正确,任何资源都可以提供帮助,非常感谢示例代码,该示例不必使用 C API,C++ 也可以,我会转换这是我自己的一种方式。
提前致谢。
LLVM IR 与此无关。它已经是一种语言。静态类型的(当然)。它对可以编译成它的内容没有影响。
有很多方法可以解决这个问题,但最终,它与为任何动态类型语言实施 JIT 编译器没有什么不同。
考虑一下您希望它如何工作。它会如何运作。其他动态类型语言如何处理这个问题。
提示:它们都是类型化的,即使它们只有 3 种类型:Object、String 和 Number,如果不是更少的话。他们只是使用某种方法在 运行 时间找出引用的类型。
您是否正在考虑现有的语言,或者您是否正在设计它?如果是前者,那么研究现有的 implementations/specifications,如果是前者 - 那么你真的可以做任何你想做的事,你拥有所有的力量。