从头开始构建 Typechecker
类型检查和推断的基本知识
讲师:Dmitry Soshnikov
双语IT资源独家Udemy付费课程,独家中英文字幕,配套资料齐全!
用不到1/10的价格,即可享受同样的高品质课程,且可以完全拥有,随时随地都可以任意观看和分享。
您将学到什么
- 类型系统
- 类型理论和类型判断
- 静态与动态 TC
- 强类型与弱类型
- 类型检查 | 类型推断
- 类型安全和内存安全
- 类型检查器实现的实践方法
- 为完整编程语言构建静态类型检查器
- 类型声明
- 泛型函数的类型
- 键入函数式和 OOP 程序
要求
- [可选]“从头开始构建解释器”课程
描述
课程大纲
无类型程序通常容易出错、运行时异常,并且会使调试变得更加困难。这就是为什么许多生产语言都实现了静态类型检查器(一个额外的模块),旨在提高程序安全性并使开发更简单。
类型检查还是类型推断?什么是类型理论和类型判断?我的语言是弱类型还是强类型?我该如何实现类型检查器?
在实现这个模块时,有很多问题。如果你在实现编程语言时一直在问这些问题,或者只是想了解 typeckechers 的底层工作原理,那么这门课程适合你。
———————————————————
有关类型理论和类型判断的相关书籍通常涉及将类型视为数学集合的理论方面,而不是解释如何实际构建实用的类型检查器。我相信我们应该能够在 2-4 小时内构建和理解一个完整的编程语言的类型检查器,端到端— 内容直奔主题,在现场编码会话中以结对编程的形式展示,并以易于理解的方式描述。
在从头构建类型检查器类中,我们特别关注静态类型检查器,并构建类似于 TypeScript、Java 等。我们稍微接触类型理论,并且从第一讲就开始进入实际实施。
实现类型检查器还会提高您的工程水平,因为它涉及数据结构和算法的几个方面。
先决条件
本课程的可选先修课程是从头开始构建解释器(又称解释基本原理)课程,我们将在该课程中为完整编程语言构建 AST 解释器。除非您已经了解编程语言在此级别的工作原理,即 eval、闭包、作用域链、环境和其他构造是什么 — 否则建议将解释器课程作为先修课程。
此课程适合哪些人?
本课程适合任何好奇的工程师,他们希望获得构建复杂系统的技能(为编程语言构建类型检查器是一项高级工程任务!),并获得构建此类系统的可转移知识。
如果您对编译器、PL 和类型理论特别感兴趣,并且想要为您的编程语言构建类型检查器模块,那么本课程也适合您。
用于实现什么?
有时人们认为,要构建类型检查器,您一定需要使用某种本身“与类型和类型理论非常相关”的编程语言(例如其他函数式编程语言的 OCaml)。但实际上并非如此!您可以用纯 JavaScript 构建一个功能齐全的类型检查器,并涵盖类型系统的所有方面。这正是我们用于实现的。
JavaScript是最流行的编程语言,应该可供许多工程师使用,而且我们的目标是提供简单而简洁的实现,而不是专注于宿主语言的细节。因此,代码应该可以移植到您喜欢和选择的任何语言:TypeScript、Rust、OCaml、C++、Python 等。
注意:我们希望学生真正遵循、理解并亲自实现 Typechecker 的每一个细节,而不是仅仅从最终解决方案中复制粘贴。尽管视频讲座中提供了 Typechecker 的完整源代码,但项目的代码存储库包含 /* 在此实现 */ 作业,学生必须解决这些作业。
这门课有什么特别之处?
这些讲座的主要特点是:
- 简洁明了。每堂讲座都内容丰富、简洁明了,并描述与主题直接相关的信息,不会分散注意力于无关的材料或演讲。
- 动画演示与实时编辑注释相结合。这使得主题更容易理解,并显示对象结构是如何连接的。静态幻灯片对于复杂的内容根本不起作用。
- 端到端的现场编码课程,并附有作业。视频讲座中提供了从头到尾的完整源代码
课程内容是什么?
本课程分为四部分,共20讲,每讲有多个子主题。以下是内容表和课程安排。
第一部分:类型理论和基本类型
在这一部分中,我们开始讨论类型理论、类型检查和类型推断,并构建类型检查器的基础。我们建立基本类型、实现变量、讨论类型环境并构建解析器。
第 2 部分:函数式编程
在本部分中,我们重点关注不同类型的函数——用户定义函数、内置函数、内部函数和闭包、递归函数和匿名 lambda 表达式。
第 3 部分:类型声明和类
在本部分中,我们实现了旨在定义新类型的构造。讨论了类型别名和 OOP 类的主题。
第 4 部分:通用编程
在本部分中,我们继续类型声明,讨论联合类型,并实现泛型函数。
本课程适合哪些人:
- 编程语言工程师
- 任何好奇的工程师,想知道类型检查器是如何工作的
如果你有能力,请务必支持课程的原创作者,这是他们应得的报酬!
本站收取的费用,仅用来维持网站正常运行的必要支出,从本站下载任何内容,说明你已经知晓并同意此条款。