编译原理和技术(H)(张昱) 2020秋 2019秋 2018秋 2017秋 2016秋 2015秋 2014秋 2013秋 2012秋  课程号:01170301
2020秋 2019秋 2018秋 2017秋 2016秋 2015秋 2014秋 2013秋 2012秋  课程号:01170301
8.9(15人评价)
  • 课程难度:困难
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:很多
选课类别:计划 教学类型:理论实验课
课程类别:本科计划内课程 开课单位:计算机科学与技术系
课程层次:专业核心 学分:4
课程主页:暂无(如果你知道,劳烦告诉我们!)
点评 写点评

上大学以来最喜欢的一门课。

课程主页:

http://staff.ustc.edu.cn/~yuzhang/compiler/index.html

http://home.ustc.edu.cn/~yxonic/compiler2016/#

https://guoxing.gitbooks.io/compiler-f2016/content/

张昱老师的教学思想是专业课中很先进的,实验的内容每年都在变,在编译器的领域有什么新的东西,都会让学生去用。

今年的实验中,实验要求等说明放在gitbook上,代码的提交使用git。实验需要使用flex、bison写编译器前端,用llvm IR做后端,最后实现一个完整的cool语言的编译器。还有很多llvm、clang的源码阅读和修改实验。大作业自选题目,然后分组展示。

实验的难点主要在学习新工具的使用上,需要查很多资料、阅读文档,比较锻炼能力,收获很大。

期中期末考试开卷,占总分的比例比较小,主要还是实验占比大。

我希望有能力的同学们都来选H班,因为H班相比普通班能学到更多先进的、实用的东西,接触计算机领域更新的技术,而不仅仅是学习编译原理的知识。

2017-02-21 00:10 7 1
secon 2018秋

负泽的助教+优秀的老师+众多的大腿=良好的课程体验。

本学期的课程总体感觉良好,除了最后一个开放性实验布置得太晚来不及干。但是如果一开始选择了科研探索这个实验就可以不做,所以建议各位还是去做科研探索比较好,虽然这学期大部分科研探索也比较水,真正有成果的只有两组,其中一组甚至发了paper!!!

个人觉得这门课的实验难度相当大,有几个实验完全不知道怎么下手,不过在同学和助教的帮助下,fail的点很少(谢谢zevin助教!)这门课的实验资料很少,而且实验内容每年都有变化,因此同学之间抱团取暖肥肠重要。

考试相当之难,建议多看看gcc编译生成的汇编码,老师课件中给出的问题要认真分析,考试题有很多相关强化型变种,对于代码分析能力的考查较高。

从给分看,昱姐这一次是调了分的,而且从课程管理上看昱姐在优化课程内容的同时也在优化课程的体验。

总的来说,这门课在维持一贯的高难度,高标准的同时,也在优化教学内容和教学方法,虽然仍然存在着一定的问题(如最后一个实验布置的太晚,论文阅读的guide太少),但是可以看得出老师也是希望我们能够多学一些与时代接轨的东西,而不是抱着多年来几乎不变的教材死读书。

来日可期。

 

 

最新消息,2019年3月22日,量子编程组投稿的论文中了,发表在TASE2019上。

恭喜之外附加羡慕嫉妒,以及再一次意识到了自己有多菜。

2019-02-02 11:01 5 2
Hypercube 2017秋

体验极差。大学期间原本有较高期望的课程中,最让我失望的一门课。度过了许多次痛苦的上课和实验,但这些痛苦并没有给我带来什么收获。

今年最主要的问题是信息发布和答疑乱七八糟,莫名其妙,不知道往年是不是这样。老师和助教都几乎只用QQ群来交流,很多网站上的错误常常只在群里说一声来更正,甚至都不发群公告。加上很多同学和助教都水群,我真不知道除非整天盯着这个群,怎么能保证不错过重要消息。而如果在群里提问一个之前已经被说过了的问题的话常常会被批评“不看聊天记录”,让人不敢提问。最能体现信息发布混乱的例子莫过于期末考试前一天,在一段普通聊天中间,老师突然说了一句考场换地方了,没有任何其他形式的明确通知。幸好我在开考前一会终于找到了正确的考场。

另外,可能是因为这门课程的实验用的工具链在追求更新和更先进,导致工具链严重不完善,助教和老师对它们的了解也不足,学生出了莫名其妙问题时常常没人解决,只能靠其他同学(比如我幸好找一个大神帮我debug了)或者索性这次实验成绩零分(比如一个妹子的机器上环境总是配不好,什么都跑不起来。我帮她看了也不明白问题出在哪里)。滑稽的是,面对这样的情况,老师和助教不但不努力设法解决(有很多显而易见的手段能改善,比如,发布一个虚拟机镜像作为基础环境),反而在让情况恶化。在群里有同学问问题时嘲讽同学“你怎么不会翻聊天记录”是最主要的表现,规定“截止日期前48小时不再回答一切问题”更是奇葩。老师认为这样能“让大家学着不赶deadline”,我看不出这里面任何逻辑关联——对于在内心里因此把deadline提前48小时的同学,他们还不是一样地赶这个更早的deadline吗。

收获有什么?恩……做实验的过程中掌握了编译器的写法,学习了编译原理(但是花了比这部分时间多好几倍的时间用来绝望地调试和编译原理本身毫无关系的工具链bug)。期末考试前48小时内看幻灯片速成了理论基础,这一点和别的课的学习情况也差不多。

最终总评85。

2018-01-31 11:13 4 2
King.Zevin 2017秋

昱姐的编译h,当然要给十分啦!

经历:

        大二上的时候脑子瓦特,所以提前选了一下h.各种酸爽,各种佩服学长们的优秀.期中8分/20分.然后开始懈怠(不如说是战略性放弃)后面实验没有做好,但还是没有中途退课.最后60分.

        大三上再来.

        个性化重修找昱姐签字.

        昱姐:是为了提高分数才来的吗?

        我:编译很重要,我没学好,想好好学一遍.(屁,这个原因只是一小部分,当然是因为要过这个"坎儿",去年真的是我的一个坎儿,不干掉编译就很不爽).

        之后好好学.所以编译h在我这里就不再是"专业重课",更不是什么"这课学了干嘛"的印象,而是必须hack掉的东西.

        所以就认真做了.尤其是teamwork吧,虽然我们组选的是老套的java GC,但是付出了40-50小时以上.虽然只占了5分.

        然后是吹水部分:

        最后92分,全班最高2333(也没说必须给4.3对吧,并且私以为这侧面反映了在编译这方面,这届没有上届强.)

实验:

        实验改了很多,但万变不离其宗.

        这学期的ddl是ddl当天的晚上十点,保证我们的睡眠,这一点超级棒.

收获:

        收获真的大!

        毕竟学过两个学期嘛233333.

昱姐:

        绝对的好老师.体现在:

        对学生:会记住每个人的名字,对的上脸,会有一定了解.(班主任有的都做不到吧)

        对课程:每年都会改进实验,教学等.这一点我学了两学期印象深刻.会尽力让我们学到的东西有用,向工业界靠近.讲课水平较高,并且会关注同学的反馈,如果有开小差严重会点到.

        对成绩:原则是"不调分",该多少就多少.对于不及格的同学例外.会在出分之前给可能不及格同学改进实验的机会.

 

2018-01-23 17:26 3 0
csmzscc 2018秋

本科期间收货最大的一门课没有之一 具体来说: 1. 编译的基本知识 很多人觉得编译知识不重要,但实际上不懂编译的人写不出好的代码(c/cpp/java甚至py都非常显著) 引用yuzhang的话说,学好编译之后学一门编程语言就非常容易了 2. 一些git,linux,c++,llvm等知识技能 要完成这门课的实验,只会c肯定是没有可能的。我在学这课之前,c++只会一点点oop,其他除了iostream,cout之外和c没啥区别。而在这门课的实验里,c++涉及到stl,模板,type trait,rtti,继承和多态,cast,还有访问者模式等东西。开始很反感这些(心里喷能不能让人好好写代码),后来才发现这些真的有用。如果工作或者研究要和大型开源c++项目打交道,这些都是非常基本的技能。 至于git,cmake,makefile,linux等技能,几乎是linux开发基本技能,接触一点也不是坏处

最后总评只比一个重修的低

2019-01-09 12:32 2 0
Nemo. 2017秋

这个课,感觉是为了英才班中的英才开设的。

实验难度很大,而且搭建环境就很复杂,助教和老师的做法呢?往好里说是培养自主解决问题能力,往不好了说就是不想照顾关心能力稍差的同学,总是一副“你怎么这都不会”的样子。

而且张老师这个人呢,可能有的同学很喜欢,但是我觉得她有些不通情达理。比如什么“ddl前多少多少天助教不要回答实验问题”,说是培养我们不赶ddl的习惯,我就不知道这么做除了让我们恶心一下还能有什么用。还有期末的答辩,一个组三个人,我们组因为一些原因少一个人,我和老师说我们组少人能不能通融一下,老师说“尽力做”,结果答辩的时候还是在怼我们(老师答辩怼了很多人,我不知道为什么要让同学下不来台,有什么话不能好好说呢)。还有上课时候抓纪律什么的,大学只见过她一个,而且还把同学说的很难堪。当然,讲课很认真必须要承认,我听的也很认真。这种老师仁者见仁智者见智吧。

最后作为英才班课程给分也不算好,不像其他英才班课程那样很高的优秀率。

 

 

2018-07-12 17:03 2 1
boj 2012秋

张昱老师的编译原理课,实验作业的量很大,一定要做好心理准备。由于张昱老师积极采用新技术,能学到不少东西。比如我 2012 年学的时候就要求使用 Git,而且不能只有一个 Git commit,要有一步步做出来的过程,commit message 还要有意义,这样基本就杜绝了抄袭。我们当年是 yacc + lex,据说后来用 clang + LLVM 取代了;我们当年是要求有 Makefile,据说后来用 cmake 取代了,都是与时俱进的。

缺交作业、缺课是万万不可的。我们那一级就有好几位同学挂科了。我的一位技术很强的学弟,因为参加国际超算比赛时间与期末考试冲突,张昱老师既不同意缓考,又不安排补考,这门挂科就影响了保研,导致他毕业只能去工作。还有一位学弟因为在北京的微软实习(联合培养博士项目),因为这门课不能缺课,只好终止实习回学校上课。

2017-11-10 01:02 2 0
perl 2019秋

有一说一,跟评课社区上以前的评价相比,这门课的体验已经好不少了。今年课程安排上删了LALR、规范LR(1)的内容,增加了一些程序分析的内容。今年的实验是基于educoder平台的,可以用平台的远程环境(但是感觉这个环境不好用,我是在自己电脑上做的),内容主要是写C1语言的词法、AST生成和LLVM IR生成。实验的大部分代码都是已经写好了的,自己只需要给核心的几个文件填空就可以了,一些没接触过的知识像访问者模式、LLVM的API之类的也都会预先布置成作业让你了解,所以体验还是很好的。

那个读LL*、ALL*论文的作业确实挺难,很锻炼口胡的能力(误)。至于考试,期中考试相比之下还好,期末考试有的题目确实很难,zy老师还批评我们说最后一大题我们做的不如去年(但是还是调分了,感动)。

唯一比较不足的就是团队合作的项目布置的有些晚,布置之后大家忙于复习而不是很有精力做团队项目,老师也批评了我们git库没几个人commit。好在汇报的时候老师也没刁难我们hh。最后给分意外的好,感觉老师还是调了不少的分的。总体来说这门课体验还是很不错的,学弟学妹们大可不必为了逃离这门课退班,zy老师还是很好的啦。

2020-01-29 22:52 1 2
根号a 2018秋

出分了就可以来点评了。张昱老师的上课质量是有目共睹的,算是科大所有课程里顶尖的一批。整个课程的难度比较大,实验非常多,感觉有数据结构的两倍以上。但是都比较有价值所以收获很大。这个学期老师的给分似乎变好了,年前出分大家似乎都比较满意可以安心过年了。

另外这门课的除了本身的实验,下半学期是会有拓展实验的,可以自行选题也可以做老师在学期一开始就给出的课题。建议是尽早去跟老师的课题,因为这样有很多的时间调研,有更大概率做出有价值的成果,还没有实验室的同学甚至可以直接借此进老师的实验室。张昱老师绝对是模范老板,很适合当导师。如果这个拓展实验做得好甚至可以发出paper。完全靠自己选题由于要到下半学期才开始,无法有很多时间调研,而且还有各种期末考试,很难做出有价值的成果。最后的成果汇报老师是严格把关的,很难混过去。

2019-02-01 12:32 1 0
浮云兔斯基 2017秋

这门课的实验中还是能学到很多东西的,包括养成看文档、源码解决问题的习惯,同时也在应对实验的同时意识到自己所能做到的比想象中要多。计院的课程实验还是挺水,有时候写完了感觉就是完成了作业这样子。。。完全没有自己收获了什么这种感觉,但这门课的实验还是不一样的。

但这种拔高带来的副作用就是很多问题就连助教可能也不能完全帮你解决。再加上助教态度不是很温和(不过设身处地的想,帮人debug还是挺头疼的)。。。而且今年的实验据说与去年不同,新花样玩起来总是有一些阻力的,各种环境啥的有点难配,而且一开头就让人直接编译llvm,而事实上,直到最后也不一定用得上这个编译的版本(除非要写checker,然而期末大家差不多都没这个心情了),有点浪费时间。再一个是C++很多人不熟,搞得这门实验像C++速成小课堂,浪费了大量时间在应付不熟悉C++特性引起的错误上。

再一个就是qq群的班级管理方式有点迷。个人觉得qq群用来锦上添花,分享额外的知识想法、抄抄答案(划掉)啥的还行,正儿八经ddl时间最好在网站和ppt上公布,并且上课强调。

此外就是teamwork比较鸡肋,分值少,所以大家都心照不宣没有搞实际项目,最后弄得像新生研讨课orz不如布置一个组队写代码的任务,就像一个额外的实验一样,毕竟团队协作调xia研bian大家其实见得太多,但合作写代码的经历还是蛮珍贵。

说了这么多然而期末征集意见的时候还是怂(눈_눈)只能寄希望于下届助教or学弟学妹能看到了。

另外,虽然一般大家会告诉你编译h实验最重要,但考试的卷面分是直接扣在总评上的啊啊啊(流下了考得烂的泪水)不过确实觉得这门课理论其实远比实验难得多,即使摸着良心瞎编出了能跑通测试的代码,但背后的实现机制,还有在使用一门语言时,以批判的眼光看待其局限、特性、创新之处,包括为什么要这样设计,那些依旧令我云里雾里的异端邪教的争论,我还是不明白啊(痛哭流涕)

但无论如何,这绝对是配得上名字后面那个H的一门课。希望它会越来越好(。・ω・。)ノ♡

2018-02-02 18:29 1 0
function 2017秋

没错我是来帮昱姐刷分的,课程质量有目共睹,老师的水平和志向也摆在那里,具体内容如上面两位大神所述,还没出分所以给分暂时没法评价只好给了一般,不过到了这一步也不在乎分数了。

2017-12-22 16:07 1 0
USTC_GaoWay 2020秋

班强我菜~              QAQ                                               

————9·27 update(先打个平均分)

To be continue

2020-09-27 16:42 0 0
Fx 2018秋

课程主页:http://staff.ustc.edu.cn/~yuzhang/compiler/

 

// 建议留出充足的时间写实验

2019-03-13 09:46 0 0
坠落的秋叶 2018秋

见识了传说中的编译原理,其实也没那么可怕。卷面考试难度颇高,建议大家学习时注重理解和运用,多从实际应用的角度出发,对编译的理解会更深刻一些。

2019-02-12 15:34 0 0
Lotdhh 2018秋

非英才班,本着不选这门课或许会成为一个遗憾的想法选了这门课,最后总评还不错。

跟非H班的同学交流过,感觉非H班的实验并不比H班的简单多少。非H班的实验貌似是代码全都要自己写,包括词法、语法分析之类的,而H班使用ANTLR,有完整的一套实验包,语法分析部分差不多就是抄一遍语法规范而已,难度要小很多。

加上H班好像没有优秀率限制,不用担心大佬多的问题,所以非英才班的同学还是可以考虑一下选这门课的。

感觉这门课难在要读两篇关于LL*、ALL*的论文并回答几个问题以及在考试周要完成的final project。final project自由选题,发布时间比较晚,临近考试周,会比较肝。本来想抱大腿来着,结果发现好多大佬都去做科研探索项目了。科研探索项目开始得比较早,人也比较多,期末应该没有那么肝。


补充:LLVM是完全没有必要自己编译的,可以直接在官网下载已经编译好的包。

2019-02-01 13:38 0 0

其他老师的「编译原理和技术(H)」课

未知 2016秋
张昱, 李诚 2017秋

张昱老师的其他课

程序设计语言基础 10.0 (1) 2013春
量子软件前沿 9.0 (1) 2019秋
程序设计语言基础 7.0 (2) 2019春 2018春
量子软件前沿 2020秋 2019秋
编译原理和技术 2010春 2009春...
数据结构 2009秋 2008秋...
数据结构与数据库 2007春 2005春...
程序设计语言理论 2020春 2018秋...
编译原理 2017秋 2016秋...