Scheme编译器斯大林中的全局类型推断

时间:2014-04-26 09:38:00

标签: types compiler-construction scheme hindley-milner

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

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

1 个答案:

答案 0 :(得分:3)

来自README

  

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

来自1997 talk by Siskind

  

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

实际的类型推断算法似乎主要在源代码中实现 档案source/stalin3b.sc

似乎SBA / 0CFA是一个完全独立的算法 辛德米尔纳。但是,Hindley-Milner也可用于实现软打字。

这里有一个更好的description of the 0CFA algorithm

相关论文是Olin Shivers' 1991年博士论文控制流程 分析高阶语言或驯服Lambda 和Flanagan& Felleisen 1995年论文基于集合的完整方案及其使用分析 在软打字