使用 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 种类型:对象、字符串和数字,如果不是更少的话。他们只是使用某种方式在运行时找出引用的类型。
您是否有现有的语言,或者您正在设计它?如果是前者,而不是研究现有的实现/规范,如果是前者 - 而不是你可以做任何你想做的事情,你拥有所有的权力。
相关文章:
- r语言 - C++ 类型为"const std ::?
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 泛型枚举和其他类型的重载模板函数
- 使用泛型类型推送到堆栈时出现问题
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 以特征类型作为参数的泛型函数回调
- 将整型常量映射到类型
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 为什么C++不允许两个同名的函数/类模板,区别仅在于非类型模板参数(整型)的类型?
- 如何在容器中指定模板化别名的泛型类型
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 具有模板专用化的泛型类型转换
- 将-Wtype限制与类型泛型代码一起使用
- 是否可以用类似C/C++(或任何语言)的语言,从作为用户输入的字符串或文件中创建用户定义的数据类型
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?
- C++存储泛型 T 类型类的向量
- 是否可以使用泛型枚举类型作为函数的参数?
- 如何在C++中返回没有模板的泛型类型?
- 如何在带有约束 (C++) 的函数中使用泛型类型
- C++制作了一个松散类型的语言解析器