主要观点:作者正在构建新配置语言 RCL,本文重点介绍其类型系统。
关键信息:
- RCL 是强类型语言,类型系统在不断完善,包括记录类型和类型别名等待添加,目前已有的部分能体现其特点。
- 类型系统有两大选择:类型约束值但值无唯一类型,类型推断单向且多自底向上。
- 同一值可适配多种类型,类型形成格,格底部是
Void
,顶部是Any
,连接操作对自底向上类型推断有用。 - RCL 是静态类型语言,能在不可达代码中报告类型错误,但部分类型检查推至运行时,有静态、运行时和不确定三种情况,通过子类型检查判断。
- 广义子类型检查可在不确定时插入运行时检查,列表类型在广义子类型检查下的协变情况特殊,作者对此的处理方式存在疑惑。
- 推断大多自底向上,对于字典字面量的推断有不同选择,RCL 决定不推断记录类型,而是通过自上而下验证引入类型。
- 单向自底向上推断会破坏引用透明性,给子表达式命名可能改变错误报告方式。
重要细节: - 如
let a: Int = 0; let b: Any = 0; let c: Union[Int, String] = 0;
展示同一值可适配多种类型。 - 格的部分结构及各类型在格中的位置,如
Void
是无 inhabitant 类型,Any
是任何值都适配的类型。 - 示例程序展示静态类型错误和运行时类型检查的情况,如
let string = "strings cannot be negated"; if false: not string else true
。 - 对列表类型协变在广义子类型检查下的特殊情况分析及处理,如
let xs = [ for x in [1, 2, 3]: if x > 10: x ]; let ys: List[Bool] = xs;
。 - 推断自底向上的具体方式,如整数字面量为
Int
类型等,以及不推断记录类型的原因和自上而下验证的方式等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。