首页 文章

Scheme编译器Stalin中的全局类型推断

提问于
浏览
6

我正在研究Scheme编译器Stalin . 它既大又复杂 . 此外,如果我理解正确,作者正计划撰写一系列详细介绍实施方面的论文,但从未接触过这样做 .

我感兴趣的斯大林方面是全局类型推断:根据它们在程序中其他地方的用法来推断事物的类型 . 斯大林确实这样做了吗?如果是,如何以及在其代码库中的位置?它是否使用Hindley-Milner算法的变体/扩展?

1 回答

  • 2

    来自README

    Stalin使用支持递归联合类型的软类型系统进行全局静态类型分析 . 斯大林可以在没有类型声明的任意Scheme程序中为每个源代码表达式确定一个狭窄甚至单形的类型 . 这允许斯大林减少或经常消除运行时类型检查和调度 . 斯大林还根据每个表达式进行低级别的表示选择 . 这允许对所有单态类型使用未装箱的基本机器数据表示,从而产生极高性能的数字代码 .

    来自1997 talk by Siskind

    斯大林使用基于集合的分析(SBA aka 0CFA)执行类型推断 . 该分析被增强以支持多变量过程分裂 . SBA的结果用于减少运行时类型检查和分派 . SBA的结果还用于基于每个表达式进行低级表示选择 . 这有两个好处 . 首先,可以消除类型标签的类型标签,允许使用基本机器表示原始数据 . 其次,可以消除拳击,减轻与拳击相关的间接,分配和回收的成本 . 消除装箱需要运行时组织允许变量,参数,结构槽和向量槽具有不同的宽度,具体取决于它们所拥有的数据类型 . 此外,只有当这些结构是不可变的时,才能取消装箱用户定义的结构 . 扩展SBA以在编译时确定数据宽度和可变性 .

    实际的类型推断算法似乎主要在源文件 source/stalin3b.sc 中实现 .

    似乎SBA / 0CFA是一个完全独立于Hindley-Milner的算法 . 然而,Hindley-Milner也可用于实现软打字 .

    这是一个更好的description of the 0CFA algorithm .

    相关论文是Olin Shivers的1991年博士论文高阶语言的控制流分析或Taming Lambda和Flanagan&Felleisen 1995年基于纸张集的全方案分析及其在软打字中的应用 .

相关问题