L10
动静态类型检查
静态类型检查在 compile 过程中进行。
动态类型和静态类型的定义:
动态类型可以是静态类型的子类
举例:
Cool 中的动态类型和静态类型:
目前市面上主流的程序语言基本都是这个规则。
self type
先举一个没有用 self type 的例子:
这里返回的 self 的静态类型还是 Count。
子类继承父类时会出现如下的问题:
解决办法:self type
self type 的注意点:
self type 操作:
首先是 self type 对应的动态类型是有约束的:
注意这里的定义。
类型检查时,不能直接将 Self_type 替换成 C。借用 lub 的概念。
需要理解这里引入 T,T'的意义。
self type usage
self type 使用场景:
注意只有函数返回类型可以是 self_type,入参不一定是。
self type checking
assign 操作不变。
dispatch 需要变化:
static dispatch:
关于动态和静态 dispatch 的内容可以参考这篇文章:
https://www.jianshu.com/p/e0659093eaac
对编程和性能有兴趣的可以读一读。
self type 总结:
错误恢复
No_type 会沿着 ast 传播:
可以看一下 Object 和 No_type 使用过程中的优缺点:
可以看到至少在本课程中,大部分时间都在分析 type checking。有些内容还是比较抽象的。
转载文章时务必注明原作者及原始链接,并注明「发表于 TesterHome 」,并不得对作品进行修改。
暫無回覆。