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

23|增强编译器前端功能第2步:增强类型体系

你好,我是宫文学。
你可能也注意到了,我们在第二部分的主要任务,是要让 PlayScript 扩展到支持更多的类型。在这个任务中,对类型的处理能力就是一个很重要的功能。
其实在第一部分,我们已经实现了一定的类型处理功能,包括类型检查、类型自动推断等,但其实还有更多的类型处理能力需要支持。
对于一门语言来说,类型系统是它的核心。语言之间的差别很多时候都体现在类型系统的设计上,程序员们通常也会对类型处理的内部机制很感兴趣。而 TypeScript 比 JavaScript 语言增强的部分,恰恰就是一个强大而又灵活的类型系统,所以我们就更有必要讨论一下与类型有关的话题了。
那么通过今天这节课,我们就来增强一下 PlayScript 的类型处理能力,在这过程中,我们也能学习到更多与类型系统有关的知识点,特别是能对类型计算的数学实质有所认知。
首先,我们来看看 TypeScript 的类型系统有什么特点。

TypeScript 的类型系统

从 TypeScript 的名字上,你就可以看出来,这门语言在类型系统的设计上,一定是下了功夫的。也确实是这样,TypeScript 在设计之初,就想弥补 JavaScript 弱类型、动态类型所带来的缺点。特别是,当程序规模变大的时候,弱类型、动态类型很容易不经意地引入一些错误,而且还比较难以发现。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

TypeScript的类型系统经过精心设计,旨在弥补JavaScript弱类型、动态类型所带来的缺点。该类型系统功能强大,表达能力很强,有利于提高程序的正确性,同时又没有削弱程序员自由表达各种设计思想的能力。文章介绍了TypeScript类型系统的特点,包括继承JavaScript的预定义类型、禁止变量类型的动态修改、支持联合类型和将值作为类型等。此外,还提到了TypeScript的类型系统还有更多丰富的特性,如数组类型、交集类型、通过class和interface实现自定义的类型、泛型等。文章强调了循序渐进的原则,先从比较简单的特性入手,然后逐步深化。接下来,文章将聚焦在联合类型和值类型的支持能力上,以体会TypeScript类型系统的强大。文章还介绍了语法解析器的升级,以支持新的语法规则,并讨论了AST和CST的区别。此外,还介绍了与类型相关的AST节点的设计和类型对象结构的表示,以及类型解析程序TypeResolver的功能。最后,文章提到了升级类型检查算法,以支持新的联合类型和值类型。整体而言,本文深入探讨了TypeScript类型系统的设计与实现,为读者提供了全面的技术视角。文章内容涉及了TypeScript类型体系的特征、语法规则的升级、类型检查功能的升级,以及与其他语言的比较和思考题等内容,为读者提供了全面的技术视角。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • ifelse
    学习打卡
    2022-09-23归属地:浙江
  • qinsi
    TypeScript的union type就是Haskell ADT里的sum type,不过是untagged,所以在判断类型上有诸多不便。TypeScript也可以定义product type: ```typescript type pair = [string, number] ``` 因为TypeScript支持值类型,又因为TypeScript的类型系统是图灵完整的,所以可以像C++的模版元编程一样,做出一些“滥用”的行为,比如你甚至可以让编译器帮你解析html: https://github.com/g-plane/type-gymnastics/blob/master/src/spec-compliant-html-parser/index.ts
    2021-10-02
  • 奋斗的蜗牛
    赞,类型系统的实现一直看不太明白,是个难点
    2021-09-29
  • quanee
    老师, 我们写的语言最后能自举吗?
    2021-09-29
    1
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部