c++ - 使用 LLVM IR 实现动态类型语言
问题描述
我正在尝试使用 LLVM C API 为动态语言构建 JIT 编译器,但我一直坚持实现动态类型,例如在函数定义中,LLVM 需要每个参数的类型,但在运行时之前类型是未知的,具体取决于用户通过,我用谷歌搜索了一段时间,但在任何地方都没有任何好的资源,我还尝试查看 Julia 的源代码,看看他们是如何做到的,不幸的是代码又大又复杂,我不得不到处跳才能找到这样的一个小细节,从我目前看到的情况来看,它们将它们的类型表示为一个空的 LLVM 结构指针和一个包含一些额外数据的 func sig 类型,但我非常不确定它是如何工作的,或者即使我是解释得对,任何资源都会有帮助,示例代码最受赞赏,示例不必在 C API 中,C++ 也很好,我会以一种或另一种方式自己转换它。
提前致谢。
解决方案
LLVM IR 与此无关。它已经是一种语言。静态类型的(当然)。它对可以编译的内容没有影响。
有很多方法可以解决这个问题,但最终,它与为任何动态类型语言实现 JIT 编译器没有什么不同。
想想你希望它如何工作。它将如何运作。其他动态类型语言如何处理这个问题。
提示:它们都是有类型的,即使它们只有 3 种类型:对象、字符串和数字,如果不是更少的话。他们只是使用某种方法在运行时找出引用的类型。
您是否有一种现有的语言,或者您正在设计它?如果是前者,则不要研究现有的实现/规范,如果是前者 - 你可以做任何你想做的事情,你拥有所有的权力。
推荐阅读
- swift - ios:如何从协调器类 SwiftUi 重新加载 webview
- react-native - React-Native 中的条码扫描
- java - 当我在 Firebase 实时数据库中添加新数据时,为什么 onChildChanged() 方法可以直接工作
- python - 被数组调用时如何将参数传递给函数?
- spring-boot - 使用 Quartz 安排时间间隔的页面
- javascript - 有没有办法在不影响站点 jquery 的情况下导入所需的 jquery
- python-3.x - 在 Python 3 中无法获取写入文本文件的代码
- javascript - 不交互时单击按钮
- android-camera2 - 使用 Camera2 API 拍摄 vivo X60 pro+ 的 48MP/50MP/100MP 图像
- javascript - 根据选择的另一个选项选择选项