程序设计语言的解释器与虚拟机 - 时清凯¶
基本信息¶
- 课程号:
22011820
- 任课教师: 时清凯
- 上课专业: 信计,计拔,计科
评价 1¶
评价者信息¶
Tag:保研;Rank 5%;2025 Spring修课
Score:95
关于老师¶
由 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 也可能存在很多细节问题。
但是 OJ 的保底机制相对友好,存在大量基础测试用例;即使是一个错到没边的实现可能也可以获得大量分数(笔者一个完全错误的面向对象设计在 Lab 3 获得了 80 分)。和编译原理一样:你可能很容易搓出一个 80 分的编译器,但它距离 100 分的距离并不比从 0 到 80 更短。
工作量¶
实验:笔者没有 Java 基础,因此做实验相对吃力一些;单次实验耗时约 20 小时。有很多同学在第一次实验 Due 之后选择退课,最终 Survive 人数不超过 15 人,实验完全满分同学不超过 5 人。
学习指南¶
有关 JVM 的部分,建议自己下课跟着 ppt 把 JDK 调试一遍;就算不是为了增长对 JDK 的理解,也能训练调试大型复杂软件的能力。
其他¶
同编译原理,手搓一个 Java 解释器还挺酷的,不是么?
如何贡献¶
请查看评价指南了解如何评价课程!