多态类型与数据流分析
多态类型
编译器能够构建类型的运行时描述,这与特定的数据结构并无太大差异。基本类型可以静态地绑定到特定标签,例如 L_int_type 。以 randomzap<a>(x:a) 函数为例,它实际上可以被翻译为如下形式:
function randomzap(a:type,x:a) : a =
let function f(y:a) : a =
let var s = sizeof(a)
in if random()
then
copy s bytes from y to result
else
copy s bytes from x to result
end
in f
end
类型描述 a 是内部函数 f 的自由变量,必须使用闭包来处理。在 f 的 then 子句中,将类型为 a 的值从其参数 y 移动到返回值寄存器的代码,必须检查 a 以确定要移动多少个字,以及从哪种类型的寄存器中移动。
类型传递具有一些有趣的特性。类型描述还可以用于垃圾回收器接口。由于每个函数都知道其所有变量的类型,多态函数也知道哪些变量描述了其他变量的类型,因此数据不需要使用装箱来描述自身。类型传递还使得引入类型选择
多态类型与数据流分析助力编译器优化
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



