手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 罗 乾 林
    class的符号信息,这些符号可以不在在虚拟机或者可执行程序中保存,如果保存了这些信息,可以让我们的语言更加灵活,如实现运行时的类加载,类自省等能力比如JAVA。不保存这些信息的有C/C++(c++有typeinfo不知道算不算)。 Norminal和Structural的类型系统,感觉Structural的类型系统更加灵活动态性更好,在编程上C++的模板机制也能提供像Structural的类型系统的能力,即所谓的鸭子类型。
    2021-10-22
    1
  • ifelse
    学习打卡
    2022-09-27归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部