我正在尝试使用LLVM C API为动态语言构建JIT编译器,但是我坚持实现动态类型,例如在函数定义中,LLVM需要每个参数的类型,但是直到基于运行时该类型才是未知的在用户通过的内容上,我搜索了一段时间,但在任何地方都没有任何好的资源,我还尝试查看Julia的源代码以了解他们是如何做到的,所幸该代码又大又复杂,我不得不四处寻找要找到这么小的细节,从我到目前为止所看到的是,它们将它们的类型表示为一个空的LLVM结构指针和一个包含一些额外数据的func sig类型,但是我不确定这是如何工作的,即使我正在正确地解释它,任何资源都可以提供帮助,最喜欢示例代码,该示例不必使用C API,C ++也很好,我将自己以一种或另一种方式进行转换。>
谢谢。
答案 0 :(得分:4)
LLVM IR与此无关。它已经是一种语言了。静态类型之一(当然)。它对可以编译成什么没有影响。
有很多解决方法,但是最终,它与为任何动态类型的语言实现JIT编译器没有什么不同。
考虑您希望它如何工作。它如何运作。其他动态类型的语言如何处理此问题。
提示:即使它们只有3种类型,也都是类型化的:Object,String和Number(如果不是更少的话)。他们只是使用某种方式在运行时找出引用的类型。
您是否正在考虑使用现有的语言,或者您正在设计中?如果是前者,那么不如研究现有的实现/规范;如果是前者,则不是您真正想做的任何事情,那么,您将拥有一切力量。