从头开始构建类型检查器

Building a Typechecker from scratch

你将学到什么

类型系统
类型理论和类型判断
静态与动态 TC
强类型与弱类型
类型检查 | 类型推断
类型安全和内存安全 类型
检查器实现的实践方法 为
完整的编程语言构建静态类型检查器
类型声明
泛型函数的类型化 函数式
和 OOP 程序的类型化

要求

[可选]“从头开始构建口译员”课程

描述

课程概述

无类型程序通常容易出错、运行时异常,并且会使调试变得更加困难。这就是为什么许多生产语言都实现了静态类型检查器——一个额外的模块,旨在提高程序的安全性并简化开发。

类型检查或类型推断?什么是类型理论和类型判断?我的语言是弱类型还是强类型?我实际上将如何实现类型检查器?

在实现这个模块时有很多问题。如果您在实现编程语言时一直在问这些问题,或者只是想了解 typeckechers 在后台是如何工作的,那么本课程适合您。

————————————————– ——–

通常关于类型理论和类型判断的相关书籍都将类型视为数学集合的理论方面,而不是解释如何实际构建实用的类型检查器。我相信我们应该能够在 2-4 小时内构建和理解一个完整的编程语言的类型检查器,端到端,内容直截了当,在实时编码会话中显示为结对编程并描述以一种可以理解的方式。

在从头开始构建类型检查器课程中,我们特别关注静态类型检查器,并构建了一个类似于 TypeScript、Java 等的类型。我们稍微接触了类型理论,并且从第一堂课开始就进入了实际实现。

实现类型检查器还会提高您的工程水平,因为它涉及数据结构和算法的多个方面。

 

先决条件

 

本课程的可选先决条件是从头开始构建解释器(又名解释基础)课程,我们在其中为完整的编程语言构建 AST 解释器。除非您已经了解编程语言在这个级别是如何工作的,即 eval、闭包、作用域链、环境和其他构造是什么——建议将解释器类作为先决条件。

这门课是为谁准备的?

本课程适用于任何好奇的工程师,他们希望获得构建复杂系统的技能(为编程语言构建类型检查器是一项高级工程任务!),并获得构建此类系统的可转移知识。

如果你对编译器、PL 和类型理论特别感兴趣,并且想为你的编程语言构建一个类型检查器模块,那么这个课程也适合你。

什么用于实施?

有时人们认为,要构建一个类型检查器,你当然需要使用一些本身“与类型和类型理论非常相关”的编程语言(例如其他函数式编程语言的 OCaml)。但实际上没有!你可以用纯 JavaScript 构建一个完全工作的类型检查器,并涵盖类型系统的所有方面。这正是我们用于实现的。

JavaScript 作为最流行的编程语言,应该可以被许多工程师使用,而且我们的目标是提供一个简单而简洁的实现,而不是专注于宿主语言的细节。因此,代码应该可以移植到您喜欢和选择的任何语言:TypeScript、Rust、OCaml、C++、Python 等。

注意:我们希望我们的学生自己真正遵循、理解和实施 Typechecker 的每个细节,而不是仅仅从最终解决方案中复制粘贴。尽管视频讲座中提供了类型检查器的完整源代码,但该项目的代码存储库包含 <em>/* 在此处实现 */</em> 作业,学生必须解决这些作业。

这门课有什么特别的?
这些讲座的主要特点是

简明扼要。每个讲座都是自给自足的,简洁的,并描述与主题直接相关的信息,而不是分散在不相关的材料或谈话上。

动画演示与实时编辑笔记相结合。这使得对主题的理解更容易,并显示对象结构是如何连接的。静态幻灯片根本不适用于复杂的内容。

带作业的端到端实时编码会话。完整的源代码,从头开始,直到最后都在视频讲座中呈现

 

课程内容是什么?

课程分为四个部分,共20节课,每节课有多个子课题。下面是目录和课程表。

第 1 部分:类型理论和基本类型

在这一部分中,我们开始讨论类型理论、类型检查和类型推断,并为我们的类型检查器奠定了基础。我们建立基本类型,实现变量,讨论 Typing Environment,构建解析器。

第 2 部分:功能编程

在这一部分中,我们关注不同类型的函数——用户定义的、内置的函数、内部函数和闭包、递归函数和匿名 lambda 表达式。

第 3 部分:类型声明和类别

在这一部分中,我们实现了旨在定义新类型的构造。考虑类型别名和 OOP 类的主题。

第 4 部分:通用编程

在这一部分中,我们继续类型声明,讨论联合类型,并实现泛型函数。

本课程适用于

编程语言工程师
任何想知道类型检查器如何工作的好奇工程师

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。