课程评价_计算机程序的解释器和虚拟机
关于老师
由 PL 组的时清凯老师授课;2025 年是第一次开课,选课人数不多,课堂氛围比较轻松;时老师自述也并不希望这变成一门大班课,而是保持小班化方便修改实验和给予指导。
时老师之前用博士成果创过业,后被蚂蚁集团成功收购;如果有创业、大厂相关的问题可以找时老师交流。
前置知识
编译原理、对一门面向对象语言的扎实基础(Cpp/Java/Python等)、最好有 Java 经验(没有也可以)
课程内容
课程的前 40% 是对实验的集中讲解(见下一节);后 60% 是对 JVM 的详细讲解,会从结构和功能上拆解 JDK 的源码进行介绍,详细程度约等于大厂 Java 岗面试对于 JDK 了解程度的要求。包括但不限于:
- Java ByteCode 的静态分析
- JVM 启动流程
- JavaObject 动态装载过程和运行分析
- JDK 的分级 JIT 技术
- GC
对没有 Java 经验的同学,是一次很好的全面入门 Java 的机会。
作业、考试与得分
整个学期安排一个大实验,最终得分只与实验和签到相关(没有作业和考试,JVM 相关部分也只是纯做科普,不参与评分)。实验内容是:基于 antlr4 使用 Java 实现一个 MiniJava 的 TreeWalk-Interpreter。实验包含 4 个部分:
- Lab1(20%):基础语句支持(基础类型、变量定义、符号表、基础表达式、内置函数)
- Lab2(30%):面向过程支持(if、while、for、函数调用)
- Lab3(30%):面向对象支持(类、成员函数、构造函数、super、instanceof)
- Lab4(20%):提交一份 pdf 报告,讲解你的解释器可能的优化方向
!特别注意!:请务必在一开始就设计好未来的架构,考虑如何支持函数、如何兼容 Object 等。2025 年有很多同学在写 Lab 2 时完全重构了 Lab 1。
除此之外,你可能需要构造大量测试用例排查 corner case;有时即使通过了 OJ 也可能存在很多细节问题。
笔者没有 Java 基础,因此做实验相对吃力一些;单次实验耗时约 20 小时。有很多同学在第一次实验 Due 之后选择退课,最终 Survive 人数 15 人左右,实验完全满分同学不到一半。
但是 OJ 的保底机制相对友好,存在大量基础测试用例;即使是一个错到没边的实现可能也可以获得大量分数(笔者一个完全错误的面向对象设计在 Lab 3 获得了 80 分)。和编译原理一样:你可能很容易搓出一个 80 分的编译器,但它距离 100 分的距离并不比从 0 到 80 更短。
其他
同编译原理,手搓一个 Java 解释器还挺酷的,不是么?