
提升你的技能:尝试用Rust(一种你可能不熟悉的语言)构建Lox语言的解释器,学习资料则是用过去常见的Java语言编写的书籍。
课程描述
有时在大学里,你会遇到那些“特别”的课程,教授在第一天上课时会布置一个看似简单的初步任务,比如“设计一个CPU指令集架构”、“从头实现Unix Shell”,或者“解狄拉克方程”。面对这样的挑战,有些学生会选择逃避,而另一些则会露出一丝苦笑,仿佛在说:“来吧,我准备好了。” 这门课程就是这样的。
你将从零开始,投入到Robert Nystrom的《Crafting Interpreters》这本书中,并被要求首先实现一个词法分析器和递归下降解析器,作为你接触Rust编程的第一个任务。之后,事情会变得越来越有挑战性。
目标受众
这门课程适合那些希望通过在一个现代编程语言中完成一个有趣的编码挑战来提升编程技能的经验丰富的程序员。也许你符合以下描述:
- 你已经编写过一些Rust代码,但希望通过参与一个复杂的项目来扩展你的技能。
- 你从未写过任何Rust代码,但对它感兴趣。你之前曾经编写过某种解释器或编译器,并且基于此,你认为自己能够在深入学习Rust时应对挑战。
- 你从未写过Rust代码,也没有编写过解释器,但你最近没有任何其他事务(尤其是工作)需要处理,并且你愿意接受这个挑战。
严肃地说,这门课程的难度类似于跑马拉松。在进行过程中,你可能会想:“天哪,我到底把自己带进了什么麻烦?” 但当一切结束时,你会为自己感到骄傲。
教学形式
这是一个为期一周的项目课程。每天开始时,我们会讨论与编程语言设计相关的各种主题,以及它们如何与Rust语言和当前项目相关。然而,大部分时间我们将用于实际编码(或者说“挣扎”)。一天中会有几次讨论环节,讨论遇到的困难(如果有)。
先决条件
你应该熟悉常见的编程语言概念,包括表达式、语句、变量、控制流、函数和类。之前实现过某种解释器(任何编程语言)的经验会有所帮助,但不是必须的。不需要有Rust的经验,但你需要准备好以加速的方式进入Rust的学习。Rust并不是最容易学习的语言,所以请做好在初期摸索的准备。
课程大纲
核心学习目标
主要目标是完成《Crafting Interpreters》书中的前十个章节,在这些章节中,你将创建一个Lox编程语言的树遍历解释器。在这个过程中,你将学习到以下编程语言实现的核心主题:
- 扫描/词法分析
- 递归下降解析
- 程序表示和抽象语法树(ASTs)
- 程序执行
- 变量、作用域规则和环境
- 控制流(条件语句、while循环、for循环)
- 函数,包括高阶函数和闭包
Rust编程技能提升
在实现解释器的过程中,你还将接触到多种Rust编程问题,包括:
- 项目组织(多文件结构)
- 字符串操作
- 错误处理和可选项
- 测试
- 代数数据类型(结构体和枚举)
- 递归数据类型(树、链表)
- 模式匹配
- 所有权和借用规则
- 内部可变性
《Crafting Interpreters》书中包含所有需要编写的代码示例,但这些示例都是用Java编写的,并使用了一些无法直接转换到Rust的惯用法。理解任务并将其正确编码是挑战的一部分。这种额外的难度实际上为课程讨论提供了有趣的内容。
