跳转至

程序设计语言的解释器与虚拟机

课程概述

本课程为25年春季新加的课程,由时清凯老师上课。开设这门课程的动机是“南京大学没有一门像样的解释器课程。而现在大厂又需要JVM等精通解释器的人才”。

课程内容

课程分为两部分:Tree-Walk Interpreter和JVM源码机理阅读。前半部分会介绍解释器的一种实现方法,后半部分介绍JVM的内部工作原理和源代码、Java Bytecode分析、JIT技术、GC算法等。分数构成为30%签到+70% Lab。

前半部分和Lab紧密相关,难度不大。后半部分难度较大,会介绍很多名词概念和技术,但是好处是不会考察,因为没有考试。与许多计算机学院传统老古董课程相比,本课程内容十分现代,采用JDK23,会介绍很多业界使用的技术。

本课程会跳过编译原理已经上过的内容,如词法、句法分析等,但是没上过编译原理的也不用怕,会带着讲一讲。

Lab

要求基于已有的Antlr和Maven框架写一个Java简化版(“MiniJava”)的解释器。共分为四个部分:

  • 第一部分(20%)要求实现表达式计算和变量定义
  • 第二部分(30%)要求实现if、for、while、函数
  • 第三部分(30%)要求实现面向对象内容
  • 第四部分(20%)要求写一个报告,讲一讲你的解释器有什么优化方向

具体实现方法和课上讲的Tree-Walk Interpreter基本相同,不过如果想要取得满分还是要自己设计架构巧思一下的。

前三次Lab需要提交OJ,每次都有100个测试点,其中大部分都是隐藏的。不过,Lab非常自由,虽然框架是Java的,但是在Maven允许下可以任意使用第三方库,或是魔改以使用其他JVM系语言(如Kotlin、Scala),而且这些操作都是官方允许的。

主观评价

课程比较轻松,而且能学到很多和Java、JVM、GC、编程语言设计相关的知识。但是Lab任务量比较大,每次Lab可能需要至少一个周末到一周整的时间在编写和debug上。由于Lab隐藏式评测,debug起来可能会非常的痛苦和折磨。此外,由于MiniJava很多特性与Java高度重合,再加上要求使用Java编写代码,如果不熟悉Java及相关特性的同学需要花费更多的功夫。

此外,25春被Lab劝退课了一小半人,而且Lab3获得满分的同学占比不是很高(感觉不超过30%)……

那么,我该不该选?

如果你对程序设计语言很感兴趣或是上了编译原理觉得体验良好的同学,这门课程非常适合你。时清凯老师说的是“也不希望这门课变成一个大课,只是希望对技术感兴趣的同学来上”。

给分

2025 Fall

40% 签到 + 60% 实验,其中实验比例同上(20:30:30:20) 根据3个样本得出结论:给分很好,Lab只要认真做95+也很容易,拿到100也不是梦()。大部分测试数据强度不高,仅实现基础功能已经可以获得大半的分数。

但是不要翘课,人少,老师会秒发现。

广告

测试不出来吗?这里有很多测试数据哦。

评论