一片自留地 斯坦福 CS143(编译原理)语义分析(二)

magicyang · 2021年03月10日 · 785 次阅读

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。有些内容还是比较抽象的。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册