【发布时间】:2012-10-14 19:55:15
【问题描述】:
Typed Racket 做了什么样的类型推断?我在 Racket 邮件列表中找到了以下 sn-p:
Typed Racket 类型系统包含许多功能 超出 Hindley/Milner 样式类型系统所支持的范围,等等 我们不能使用那个推理系统。目前,Typed Racket 使用 本地类型推断来推断程序中的许多类型,但是 我们想推断出更多——这是一个正在进行的领域 研究。
上面的简介使用术语“本地类型推断”,我也听说过很多使用“出现类型”,但我不确定这些术语是什么意思。
在我看来,Typed Racket 目前使用的类型推断系统过于薄弱。这是我的意思的一个例子。以下不输入检查:
(struct: pt ([x : Real] [y : Real]))
(define (midpoint p1 p2)
(pt (/ (+ (pt-x p1) (pt-x p2)) 2)
(/ (+ (pt-y p1) (pt-y p2)) 2)))
您必须用(: midpoint (pt pt -> pt)) 显式注释midpoint,否则会出现错误:Type Checker: Expected pt, but got Any in: p1。为什么类型检查器不能由此得出p1 和p2 的类型必须 是pt?这是 Racket 实现类型的方式的基本限制吗(即,由于 Racket 的一些更高级的类型特性,这种推理有时实际上是错误),还是可以实现的?未来?
【问题讨论】:
-
Sam Tobin-Hochstadt 的博士论文应该有血淋淋的细节:ccs.neu.edu/racket/pubs/dissertation-tobin-hochstadt.pdf
标签: types racket type-inference typed-racket