30|面向对象编程第2步:剖析一些技术细节
宫文学
你好,我是宫文学。
在上一节课里,我们实现了基本的面向对象特性,包括声明类、创建对象、访问对象的属性和方法等等。
本来,我想马上进入对象的继承和多态的环节。但在准备示例程序的过程中,我发现有一些技术细节还是值得单独拿出来,和你剖析一下的,以免你在看代码的时候可能会抓不住关键点,不好消化。俗话说,魔鬼都在细节中。搞技术的时候,经常一个小细节就会成为拦路虎。
我想给你剖析的技术细节呢,主要是语义分析和 AST 解释器方面的。通过研究这些技术细节,你会对面向对象的底层实现技术有更加细致的了解。
技术细节:语义分析
语义分析方面的技术细节包括:如何设计和保存 class 的符号、如何设计 class 对应的类型、如何给 This 表达式做引用消解、如何消解点符号表达式中变量等等。
首先看看第一个问题,就是如何在符号表里保存 class 的符号。
我们知道,符号表里存储的是我们自己在程序里声明出来的那些符号。在上一节课之前,我们在符号表里主要保存了两类数据:变量和函数。而 class 也是我们用程序声明出来的,所以也可以被纳入到符号表里保存。
你应该还记得,我们的符号表采用的是一种层次化的数据结构,也就是 Scope 的层层嵌套。而且,TypeScript 只允许在顶层的作用域中声明 class,不允许在 class 内部或函数内部嵌套声明 class,所以 class 的符号总是被保存在顶层的 Scope 中。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了面向对象编程中的技术细节,包括语义分析和AST解释器方面的内容。在语义分析方面,文章介绍了设计和保存class符号的方法,以及对This表达式和点符号表达式的引用消解。在AST解释器方面,文章提到了类型的窄化和对象数据在栈桢中的存储方式。通过清晰的语言和具体的例子,读者可以更加细致地了解面向对象编程中的一些关键技术细节。文章还强调了对栈桢的理解和在实现中的关键技术点。此外,读者还被鼓励思考class符号在虚拟机或可执行程序中的保存方式以及Nominal和Structural类型系统的使用体会。整体而言,本文为读者提供了深入理解面向对象编程技术细节的机会。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 罗 乾 林class的符号信息,这些符号可以不在在虚拟机或者可执行程序中保存,如果保存了这些信息,可以让我们的语言更加灵活,如实现运行时的类加载,类自省等能力比如JAVA。不保存这些信息的有C/C++(c++有typeinfo不知道算不算)。 Norminal和Structural的类型系统,感觉Structural的类型系统更加灵活动态性更好,在编程上C++的模板机制也能提供像Structural的类型系统的能力,即所谓的鸭子类型。2021-10-221
- ifelse学习打卡2022-09-27归属地:浙江
收起评论