| 选课类别:计划内与自由选修 | 教学类型:理论实验课 |
| 课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
| 课程层次:专业核心 | 学分:4.0 |
This course considers the principles that underlie a wide variety of compilers, and focuses on the problem of translating programs written in a high-level language into semantically equivalent programs written in low-level machine code. After taking this course, students are expected to understand the principles of designing and implementing modern programming languages, and to implement a working compiler using standard compiler tools.
李诚老师被广泛认同为一位教学优秀的老师,其讲课风趣、逻辑清晰,PPT 制作精良且细致生动,给予学生丰富的学习体验。课程内容涵盖编译前端到后端的各个部分,包括词法分析、语法分析、中间代码生成及优化等,其中还融入现代工具如 LLVM 的实际应用。
课程以理论与实践结合为特色,帮助学生在编译原理之外,还学习到 C++ 编程、git 使用以及 gdb 调试等现代软件工程实践。课程内容循序渐进,从基本的分析方法到实际的编译器实现和代码优化,让学生对编译技术有全面深入的领悟。尤其是实验,将编译理论应用于实际工程,提供了前所未有的动手机会。
作业量适中,多为思考题,要求学生活学活用不是单纯查书。实验设计精巧,涉及从词法分析到高级优化策略实施的完整流程,强度较大但收获丰富。Lab4 的 GVN 实验因其复杂性需要耗费大量时间,但挑战也是学习过程中的一部分;有学生指出,包括一些自由度高的实验设计,虽能看到不同思路,但也给初学者带来了一定障碍。助教团队在实验上投入大量精力,虽然工具链配置和实验文档被部分同学认为复杂,但助教们在解答问题和提供帮助方面非常尽责。
课程包括期中和期末考试,考试内容紧密结合实验和理论课堂内容,通常不涉及死记硬背的概念。期中开卷期末闭卷,开卷考试的形式较为亲民,使得理解与应用变为重点。尽管给分策略在部分学期存在变动,整体上实验成绩在总评中占较大比重,只要认真完成实验,期末考试成绩一般不至于拖累总评。
总体而言,《编译原理和技术》被称为最能体现理论与实践结合的课程之一。实验带来的挑战和成就感使其成为计算机基础课程中不可多得的体验。尽管课程难度大,但在李诚老师与助教的全力支持下,课程仍保持了较高的学习效果和满意度。选这门课的同学需要对编程和工程实践有一定兴趣和心理准备,努力不负所学,必有丰厚回报。
本学期⑦助教之一
本学期课程主页:http://staff.ustc.edu.cn/~chengli7/courses/compiler19/
本学期决定不用qq群,而改用gitlab的issue
------------
欢迎吐槽
总评94,有点小伤心,不过自己期末考的怎么样也是有数的。
实在是想狠狠的夸一夸李诚老师,要不是我对系统和分布式兴趣不大,我一定和李老师跟到博士(你在想peach)
多说一句,如果大家在各课程看到一位新加入科大的教授(而且比较年轻),建议去试一试,甚至能在实验室里混到一席之地吧(为什么我就没有这样的命运嘤嘤嘤)
闲话不扯了,建议大家来。
最后大言不惭的谈两句对这门课程的看法:我实在觉得这是相比本学期其他课程以外,最简单的课了
1. 有清晰的算法、概念、计算步骤与思路;没有十分困难的设计和灵光的闪现。
2. 教材(龙书)讲解的很好,如果要精炼一点,昱姐的紫书也还可以(但我至今认为它就是在抄龙书还抄的不咋地);相比其他同年课程(随机过程,遍地都是错;微机原理,废话太多书还绝版)要好得多了。
3. 课堂与考试最为接近,这点与计算方法和随机过程相比尤为显著。
4. 李老师单独出题,考点鲜明,也不为难人,看懂书学会算法绝对能拿好成绩。
看到今年的评价不太多,所以来说说今年课程的主要内容。
今年主要使用 gitlab 发布课程信息、作业、PPT以及问题讨论,地址是 http://210.45.114.30/,据老师和助教的想法是这样比较能避免水群的问题,而且有信息和问题大家能一起讨论。实际体验还不错(除了有些你特别着急的时候可能无法及时得到回复,但是一般 ddl 时间都留的比较够,这种情况一般不太会发生),大多数情况下助教和老师的回复都很及时(这里赞李老师,真的是到目前为止大学见过最负责的老师,会经常看 issue 并及时回复)。
课程主要内容和之前的变化应该不太大,还是那些东西,我基本上就只看了 PPT (大雾,期中考试之前才买了龙书,但考试的时候也没看),PPT 很细致,会把讲的例子的步骤一页一页的呈现,并且还有不同颜色标注重点,真的很赞。
实验内容今年变化比较大,今年是写一个 C- 语言的编译器,使用 LLVM 作为中间层,一共 4 个实验:
具体的实验内容可以参考 gitlab。实验一比较简单,唯一的难点可能是匹配多行注释,这个在网上有很多资料可以参考;实验二还是得吐槽一下,助教的目录结构特别混乱,给的教程质量也不高,导致很多同学把大量的时间花在了 merge 更改和把 lex 和 yacc 结合在一起,而不是实验本身;实验三是综合来说最难的一个实验,但好在实验有比较详细的教程和铺垫,并且是组队实验(ps:选个靠谱的队友!),大家认真合作一下还是能完成的不错的;实验四的写阅读报告其实我感觉也挺难的,这个比较考验查找 LLVM 文档的能力,源码中的有些变量挺迷的,最后也接近考试复习了,于是就口糊了一下(雾)。总之实验的质量还是很高的,如果要提建议的话,建议下次助教之间好好协商一下目录安排、实验内容这类比较影响全局体验的东西上,否则就有可能出现这一个助教觉得上一个助教的东西比较乱于是直接推翻重写了一套的情况(也不是不行,但是感觉不是很连贯,最终也没有把自己写的几个实验结合在一起变成一个真的编译器),不过影响其实不大。
作业:课程前一部分作业布置的不少(我感觉其实还好),有同学反映作业太多之后,老师的作业量立即变少(真的很考虑学生的感受),不过还是涵盖了重点。唯一觉得可能需要改进的一点是作业的批改和正确答案的公布可以再及时一些。
考试内容:期中开卷(但不可以带紫书答案),除了第一题需要将一个很复杂的 NFA 转成 DFA 是真的很麻烦(因为我这类题本身做的比较慢,所以写出来 NFA 之后直接跳了,有些没跳的同学后面的时间不太够了,所以需要自己权衡一下),其他的题都是很正的题,如果熟练的话基本不需要看带的资料;期末考试闭卷,今年没考数据流分析,考的都是重点和老师强调过的知识点,没有偏题怪题,建议听老师期末之前的复习课,课上老师会讲考试范围、重点,帮大家复习一下(PPT 当然也会上传),还考察了实验相关的内容,建议每次实验出分之后好好看一下自己出错的地方。
最后,这门课的体验是真的很好,这应该是大三上我所上的课中听课人数最多的一门课(雾),李老师是真的很负责,水平也很高,助教也很负责。
综上,给这门课点赞~
李诚老师实在是太棒啦!幽默风趣,讲课一流!
但是这门课属实是这学期负担最重的一门课。实验是写一个cminus编译器和llvm代码阅读,总共有6次,难度不小,每一次实验都得花两三天来做。作业其实也不少,总共布置了13次。
最后,李诚老师其实给分很好啊,如果自己成绩不行的话,就扪心自问一下自己学得到底怎么样吧。
课程体验很好,李老师人很 nice,十分推荐!
课程没有 QQ 群,课程讨论和实验、作业提交都是用自建的 GitLab 平台,大家有问题在上面提 issue,助教和老师很负责,回复的一般都很快。
实验部分改动较大,今年的任务是完成一个 C- 编译器(其他评论有详细说明)。在实验前期有过一些小风波,但是处理的很不错。
最后再补充一下李老师的个人魅力,除去教学、科研这种“本行”不说,老师还人品好、情商高,十分关心同学。就我自己来说,除了课程知识本身,还有很多课程外的收获。还享受过一次私人专车接送服务(我住东区,老师在西区讲完习题课问有没有同学要回东区,我就顺路搭车了 \笑哭)。
(可能唯一的遗憾就是,两场考试,由于自己比较浪考的都不算理想,有点愧对李老师 \囧)
刚刚开始这门课的时候确实觉得可能有一点相性不合(后期也不太合),实验、作业相对另一个班负担重很多,也接触了很多完全没有接触过的东西。但李诚老师值得满分,不只是学术上的导师,人生的导师,生活中的朋友,“我们应该去做一些有挑战的事情”。
总之,如果选了这个班,开头会后悔,中期会后悔,但最后一定会感念遇到诚哥的(个人真实经历……)
如果你想问给分的话,给分是真的好!