RCL 的类型系统:类型系统

主要观点:作者正在构建新配置语言 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类型等,以及不推断记录类型的原因和自上而下验证的方式等。
阅读 11
0 条评论