选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
课程层次:专业核心 | 学分:4.0 |
本课程是计算机科学与技术英才班的专业核心课,目的是让学生对程序设计语言的设计和实现技术有深刻的理解,对和程序设计语言有关的理论有所了解,并能把本课程讨论的概念和技术用到软件设计和开发中。本课程介绍编译器构造的一般原理和基本实现方法,其内容包括词法分析、语法分析、类型检查、运行时存储空间的组织和管理、中间代码生成、代码优化和目标代码生成等部分。本课程在介绍编译器各逻辑阶段实现技术的同时,还强调形式化描述技术,并以语法制导的定义作为翻译的主要描述工具。作为原理性的课程,本课程介绍基本的理论和方法,而不偏向于某种源语言或目标机器。与普通班的同类课程相比,本课程重点增强课程实验的难度和复杂度。
张昱老师主讲的《编译原理和技术(H)》课程内容丰富,覆盖编译器多个阶段,如词法分析、语法分析和代码生成等,还会拓展介绍先进技术和前沿应用。教材方面,有部分学生反映"教材理解难,有些概念晦涩",但PPT质量较高,帮助部分同学很好地理解课程内容。虽然课堂节奏较快,但老师认真负责,有补充讲解,也会结合业界和前沿技术内容。
课程中的作业量适中,难度较大,主要考察课程内容的运用和理解。实验涵盖了从词法分析到后端代码生成的完整编译器流程。实验任务量大、技术更新快,且应用实际开发工具(如LLVM)处理现代编译技术,但平台偶有不稳定,对C++等技术要求高,需要学生投入大量时间。有匿名互评设计环节,被学生认为提升作用显著。实验在学习新工具方面有一定帮助,但由于C++基础差异,部分学生觉得上手难。
课程考试包括期中和期末,采取开卷考试形式,题目灵活创新,呼唤学生对知识灵活应用的能力,从分析知识点到实际运用。虽然考试难度被广泛提及,"困难且偏重理解与应用",但有调整政策,一定程度上缓解得分困难。不过,部分学生认为考试难度不一定反映真实能力学到多少。
这门课在很多学生心中收获颇丰,是学编译不可多得的体验:既有难度又有深度。但也有学生提到课程管理和信息发布不够完善,例如信息多在QQ群,导致管理跟进不够。此外,虽然课程内容利用现代工具链(如LLVM、Git)对学习有很大帮助,但部分学生由于工具链问题,感到负担大。
课程在内容上与业界接轨,能够拓展学生视野,但实验与考试难度偏高,考验学生独立解决问题的能力。如果对编译技术有额外的兴趣和能力,选这门课可以带来实际意义上的较大收获,但也需做好承担较大工作量的准备。对于以GPA为重的学生而言,可能需要慎重考虑课程安排和选择。
最后一次作业是自己设计题目,大家匿评
开始觉得很逆天(无聊),但是为了完成任务还是搜了几个编程范式上比较有名的话题,出了两道题
没想到的是匿评的方式效果出乎意料的好,大家都好有礼貌的在交流,而且基本上都是对一些比较新或者妙的点的观察,评价完别人+回完别人对自己的评价之后感觉挺有收获的。
真不知道该咋说啊,利益一点这门课出分之后学期GPA掉了0.2,但是平常实训和大作业都是认真完成了,看来是期中完全炸裂导致的。
摆了,不要掉到保研线以下就行😋
今天去查卷,着实让我领教了张昱教授道貌岸然的外表下的糊弄本色,也恰巧与其上课作风一致。
虽然这门课对我总G影响很有限,但是为了看看自己死在哪里还是申请了查卷。按道理来说查卷中发生的改卷错误,订正过来是很合理很正常的,本人也做过助教,对这种事向来都持宽容态度。但是张昱教授在查卷时的态度令我恶心,具体罗列如下:
进入大三,我的一些同学纷纷退出英才班。经过我一个学期的观察,在其他老师班上上这门课,要么老师态度很好,要么给分很好。但是英才班这坨shit已经吃完了3/4,怎么办呢,吃完呗。
奉劝之后的同学:学完OSH和CODH就可以退了,大三之后英才班根本没有待的必要。
想了一下感觉之前评课有点过激,存档丢这里了,下面放点对 H 班和普通班(本文指李诚老师班)的比较,可能对选课有点用(
编译原理内容很多:
这就决定了默认的实验设置难以覆盖课程的方方面面(即使这门课实验可能已经是本科所有课程中质量最高,量最大的了)。因此课程的深度和广度除了实验还在课堂。
总体来说课程相比普通班是很有特色和区分度(难度)的,欢迎来学(给分个人感觉不用太在意,2022 年虽然不算很奶但绝对不杀(从优秀率也可以看出来))。
期中考完开始摆烂,念名字发卷子的操作直接梦回初中时代。
第十四周布置个自己出题互相打分的作业,花样多多。
第十六周结课了布置带答辩的大作业,DDL空降考试周正中间,4号编译6号算法8号随机过程10号就是这个实验DDL,12号实验答辩。
老师上课很认真,作业和实验都有很认真的设计,收获很多,是在计科上的最优质量的专业必修课了。给分还不知道,不过不抱期望了。
H课不怕大家说,H课怕大家不说。
昱姐真的是好老师,5分给老师,0分给自己,加起来5分.
DDL延到考试后了。
属实是好课,上了不亏。
终于全部结束啦,完整的评一下这门课
作业:每周一次,课后习题,不超过3题,不算很难,可以说和考试不是一个难度。
实验:前3次实验用来熟悉Cpp的某些特性(虽然感觉做了之后也没对cpp熟悉多少),从实验四开始难度陡增,所以请留出充分的时间debug。后面四次实验分别是文法分析,类型检查,代码生成以及优化。助教的实验文档写得比较详细,但每次还是在阅读接口代码上花费了很多时间。虽然是在educoder上有现成的环境,但是根据助教的文档,在本地配置一个环境一点都不复杂,在本地写实验当然是效率++。最后两次实验是组队实验,第一次组队实验耦合度比较高,需要队友之间经常交流,所以和熟悉的人一起组队可以省不少事。第二次组队实验ddl本来在考试周,但老师后来调到了所有考试结束后三天。最后一次实验任务量相当大,ddl特别紧迫,绝对是我整个大学生涯目前最刺激的一次实验,体验极佳。对于实验,中间几次实验在educoder上测试,有一些很不容易想到的隐藏样例点,多和同学交流当然有好处。
考试:实在是太难了,期中考得差得要命,导致我期末直接没有去问成绩。老师水平是真的高,不知道怎么就出出来这么精妙的题目,题目主要考察的是对知识的运用情况,刷题似乎是没什么用的。
老师:上课水平应该是计科数一数二的了。老师特别温柔,第一节课就跟我们说“感谢大家知道我给分不好还选这门课”,对同学的严格要求我也不认为是什么不好的事情。平常课间也会和同学聊天,问同学一些课程外的问题,课堂气氛真好。在计科,能上到这么一位好老师的课真的是幸运的事情。
总的来说,这门课还是相当有难度的,我也经常会去问同学问题qwq不然很多课程上的问题我都无法解决,非常感谢!这是我在计科投入最多的课,虽然感觉总评可能会跌破我的史低,但还是觉得挺值得的(谁让我考试中暴露水平了呢hhhh)
编译原理H是计算机学院最好的课!
张昱是计算机学院最好的老师!
泻药
老师喜欢班上教育人
例如:你们后面一定能用的到这么课xxxxxx
实验一堆不知所云,简称一坨shit
最后的大实验也很无趣。
研究本来就是兴趣驱使,强迫不喜欢这门课的同学在课上做该门专业的科研研究初步,你觉得是不是脑子里面指定装的不止脑花。
很蠢的课,就是喂学生吃shit。
大三能退英才班的就退吧,别在这班上吃shit了。要修其他英才班的课程你高级替代不香吗?真无语了。
这门课花的时间能占三门课的时间。讲的也没李诚班好,最后一个实验还照搬李诚班的实验,那我为什么不去李诚班,要来这个课上吃shit。
反正这门课后,要恶心我至少一年,怎么有这样迷之自信的老师啊。。。。。
还有:迟到了,在外面站一节课再进来,笑死了。欢迎来到zy老师大班课堂,给你妈妈一样的感觉。
更新:张昱老师真牛逼,我还是有点素质吧,不在这里开始喷你了
上大学以来最喜欢的一门课。
课程主页:
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班相比普通班能学到更多先进的、实用的东西,接触计算机领域更新的技术,而不仅仅是学习编译原理的知识。
体验极差。大学期间原本有较高期望的课程中,最让我失望的一门课。度过了许多次痛苦的上课和实验,但这些痛苦并没有给我带来什么收获。
今年最主要的问题是信息发布和答疑乱七八糟,莫名其妙,不知道往年是不是这样。老师和助教都几乎只用QQ群来交流,很多网站上的错误常常只在群里说一声来更正,甚至都不发群公告。加上很多同学和助教都水群,我真不知道除非整天盯着这个群,怎么能保证不错过重要消息。而如果在群里提问一个之前已经被说过了的问题的话常常会被批评“不看聊天记录”,让人不敢提问。最能体现信息发布混乱的例子莫过于期末考试前一天,在一段普通聊天中间,老师突然说了一句考场换地方了,没有任何其他形式的明确通知。幸好我在开考前一会终于找到了正确的考场。
另外,可能是因为这门课程的实验用的工具链在追求更新和更先进,导致工具链严重不完善,助教和老师对它们的了解也不足,学生出了莫名其妙问题时常常没人解决,只能靠其他同学(比如我幸好找一个大神帮我debug了)或者索性这次实验成绩零分(比如一个妹子的机器上环境总是配不好,什么都跑不起来。我帮她看了也不明白问题出在哪里)。滑稽的是,面对这样的情况,老师和助教不但不努力设法解决(有很多显而易见的手段能改善,比如,发布一个虚拟机镜像作为基础环境),反而在让情况恶化。在群里有同学问问题时嘲讽同学“你怎么不会翻聊天记录”是最主要的表现,规定“截止日期前48小时不再回答一切问题”更是奇葩。老师认为这样能“让大家学着不赶deadline”,我看不出这里面任何逻辑关联——对于在内心里因此把deadline提前48小时的同学,他们还不是一样地赶这个更早的deadline吗。
收获有什么?恩……做实验的过程中掌握了编译器的写法,学习了编译原理(但是花了比这部分时间多好几倍的时间用来绝望地调试和编译原理本身毫无关系的工具链bug)。期末考试前48小时内看幻灯片速成了理论基础,这一点和别的课的学习情况也差不多。
最终总评85。
负泽的助教+优秀的老师+众多的大腿=良好的课程体验。
本学期的课程总体感觉良好,除了最后一个开放性实验布置得太晚来不及干。但是如果一开始选择了科研探索这个实验就可以不做,所以建议各位还是去做科研探索比较好,虽然这学期大部分科研探索也比较水,真正有成果的只有两组,其中一组甚至发了paper!!!
个人觉得这门课的实验难度相当大,有几个实验完全不知道怎么下手,不过在同学和助教的帮助下,fail的点很少(谢谢zevin助教!)这门课的实验资料很少,而且实验内容每年都有变化,因此同学之间抱团取暖肥肠重要。
考试相当之难,建议多看看gcc编译生成的汇编码,老师课件中给出的问题要认真分析,考试题有很多相关强化型变种,对于代码分析能力的考查较高。
从给分看,昱姐这一次是调了分的,而且从课程管理上看昱姐在优化课程内容的同时也在优化课程的体验。
总的来说,这门课在维持一贯的高难度,高标准的同时,也在优化教学内容和教学方法,虽然仍然存在着一定的问题(如最后一个实验布置的太晚,论文阅读的guide太少),但是可以看得出老师也是希望我们能够多学一些与时代接轨的东西,而不是抱着多年来几乎不变的教材死读书。
来日可期。
最新消息,2019年3月22日,量子编程组投稿的论文中了,发表在TASE2019上。
恭喜之外附加羡慕嫉妒,以及再一次意识到了自己有多菜。
不是哥们,第一次检查实验的时候和我说就三个实验,今天查完第三个实验转头又来第四个?我理解大家都不容易,但是说话能有点准头吗?
不知道这是谁的锅,评分先往下拉了,高兴了没一个下午。。。
声明一下:除了这件事情之外,本学期编译H的4位助教都是大爹级别的,个人倾向于认为这件事情是偶然的。
实验发布喽~
四个关卡,一个月,但考试周。
课堂:前半学期我上课比较认真,老师讲得很好,也能跟上,课后不需要花过多时间复习。后半学期因为各种实验开始上课一边听一边摸鱼( 直接导致好多东西只能自己看PPT看书,感觉有点费劲。所以在此奉劝后面的同学们编译H上课一定尽量认真听课
作业:作业是每次上完课都布置->相当于一周2次,每次题目倒是不算多,基本都是对课堂内容的考察和理解,没啥好说的,而且每年题目差别也不大
实验:一共7次 5次独立实验 前三次是一些小实验 包括智能指针,c++运行时,主要介绍和学习一些东西,第四次词法语法分析器,第五次语义检查,第六次第七次合作实验2-3人,分别是中间代码生成和代码优化,代码优化ddl在考试周之后,结束之后还有一个答辩(虽然感觉大家实现没啥大的本质的区别,毕竟不是自由选题的实验)总体而言七个实验都能学到很多东西,而且基本框架都搭好了,有了一个基本的思路,个人感觉挺好的。
考试:期中 期末卷面满分都是24分,据老师说是直接以20分为满算入总评,也就是大于等于20就能算满分了,算是给分上面给了极大的缓冲空间了,考试都是完全开卷,可以用电脑看资料(不能跑代码),不过考试体型大部分基本都不算送分题,需要灵活.运用所学。
总体:感觉是我3门H课里面学到东西最多的课,虽然考完试还要留在学校写几天代码答辩确实很累,但是相比之前安排在考试周中间验收答辩,那还是轻松了很多,还是很感谢老师助教为大家考虑,延迟到考试周结束。最后期中+期末38.5分 总评给了95 感觉还是被捞了一点,没有卡绩 感谢老师。
出分了,张老师我滴超人!编译完全没学会还给了85!太惭愧了寒假再学一学编译!
-------------------------------------------------------------------------------------------
不会写书能不能别写,教材让我怀疑自己是不是丧失了阅读能力。
我还在想是不是正在啃量子场论,一看书名《编译原理》(流汗黄豆)
每次打开书头都疼,真有你的!
-------------------------------------------------------------------------------------------
如果这本编译原理是一份代码的话,它起码没有做到基本的到达定值优化。
作者善于在讲一个概念的时候定义各种船新名词似乎是炫耀一波后就弃置不用了,等于作者定义一堆没用的变量然后不用辣!
这本书不适合叫编译原理,应该叫编译技术,原理起码要简洁严密,如果没有写CLRS的本事就不要揽瓷器活了。
本书还抱着半死不活的Pascal不放,学了书上的Pascal例子我只觉得这个语言很逆天,2202年了例子可以都换成c或者大家更熟知的语言吧。
后几章的习题更是一言难尽,给一堆正常人写不出的代码分析bug?既不算原理,也不是技术,里外不做人了。
哭哭,然后我们要根据这本书来考试。
-------------------------------------------------------------------------------------------
结课后布置大作业,答辩穿插考试周,这真的合理吗?md摆烂摆烂摆摆摆摆摆!
后续:由于信院同学在评课社区的积极抗争,为我们争取到了ddl延后,感谢信院同学!!!
-------------------------------------------------------------------------------------------
说一说实验吧,给没上过课的同学一点具体参考。
似乎今年的实验已经cover掉lc班实验的范围了。
前面1到3个小实验是给大家补一点c ++基本知识,考虑到大一大二都没有什么oop的机会,所以普通同学不了解,好一点的会写点QT,再好一些的可以写点科研项目。小实验掌握到多态,RTTI,访问者模式即可。
大实验还是以c++为主的,要会看懂bison,yacc,llvm这些上课讲过的语言。大实验一共4个,前两个自己做,后两个分组做。大实验是经过老师助教设计的,其实也就是编译比赛的题目拿来简化了,助教写的代码在github上都开源了,我到第3个实验才知道。。。
大实验代码量人均三四百行而已,并不算大,但是很花时间。
对于独立实验,我想主要在于每次写实验都要花80%的时间去理解助教想让我们干什么,因为编译器实际上写来写去就是个字符串分析程序,为了分析字符串的各种情况,需要定义各种类。很多人说接口文档质量不好,其实这个文档水平还算清晰的,只是要利用接口,文档写得再详细,都得去花大量功夫看一部分源码实现,对我来说,时间基本花在这里。慢慢梳理出来助教想干啥之后,怎么写就很简单。我觉得没必要在复杂度上难为大家,那么多功能,那么多的接口,有点脱离本质的意味了。
然后合作实验,真的槽点满满。。。目前看来,三个人合写一个中间代码生成器,由于语法树各结点的耦合性还比较强,每个人理解不一样,每人只写一部分肯定bug满满。。举例是float和int的隐式转换在各个地方都要注意,这个一开始没有合理架构好,后面只能在屎山上修修补补。刚学的编译哪有什么架构能力。。。。整个过程就很痛苦。然后合作伙伴因为是熟人还勉强顺利,很难想象如果没磨合好的三个人面对的是什么人间疾苦。
最后一个实验也摸了,认清自己是个废物。。。。
-------------------------------------------------------------------------------------------
期末复习时的一些感想:PPT详略得当,算是对书的弥补了,感情是我期中没看PPT只看书花费巨多时间所以爆炸了?关于第10章编译运行时系统,PPT似乎就是抄CSAPP的第七章,推荐去看原书。意识到可能有不少干货在别的参考书上,可惜明天就考试了。。
深夜emo一下,该课程其他好坏具体的看到其他人也都说了
从唯心角度:
该课程我付出了很多的时间精力,也掌握了一定的编译知识,但是在申请季根本没人想听我解释为什么这样一门core course我拿了70+
先说我个人的结论:如果不是要拿英才班奖学金,建议直接左转李诚班。
上课:老师上课确实还是很有热情的,而且因为人少教室小,听课体验还是不错的。会时不时讲一些业界、前沿的东西,但我觉得确实有利有弊,主要的问题是PPT显得过于混乱冗杂,有点容易让人抓不住重点。
实验:确实有很多要吐槽的地方。
考试:确实很难,而且是跟上课拧螺丝考试造航母的那种(不知道老师在哪找来的那些奇奇怪怪的题目),感觉有点像让一个高考生直接去做竞赛题目一样,所以即使是完全开卷似乎也并没有什么帮助。
至于给分,老师应该算是有调分,复查期中期末试卷的时候应该是向上调了一些,最后大概给了60%的优秀率(19/32)。考虑到H班的大佬密度其实不能算好,尤其是在今年李诚班给分好到令人吹爆的情况下。
其实这门课已经比妮可绝大多数CS专业课要好不少了,奈何李诚老师实在过于强大,既给了大佬们发挥的空间,也给了普通人喘息的机会。因此得出了开头的结论。
昱姐的编译h,当然要给十分啦!
经历:
大二上的时候脑子瓦特,所以提前选了一下h.各种酸爽,各种佩服学长们的优秀.期中8分/20分.然后开始懈怠(不如说是战略性放弃)后面实验没有做好,但还是没有中途退课.最后60分.
大三上再来.
个性化重修找昱姐签字.
昱姐:是为了提高分数才来的吗?
我:编译很重要,我没学好,想好好学一遍.(屁,这个原因只是一小部分,当然是因为要过这个"坎儿",去年真的是我的一个坎儿,不干掉编译就很不爽).
之后好好学.所以编译h在我这里就不再是"专业重课",更不是什么"这课学了干嘛"的印象,而是必须hack掉的东西.
所以就认真做了.尤其是teamwork吧,虽然我们组选的是老套的java GC,但是付出了40-50小时以上.虽然只占了5分.
然后是吹水部分:
最后92分,全班最高2333(也没说必须给4.3对吧,并且私以为这侧面反映了在编译这方面,这届没有上届强.)
实验:
实验改了很多,但万变不离其宗.
这学期的ddl是ddl当天的晚上十点,保证我们的睡眠,这一点超级棒.
收获:
收获真的大!
毕竟学过两个学期嘛233333.
昱姐:
绝对的好老师.体现在:
对学生:会记住每个人的名字,对的上脸,会有一定了解.(班主任有的都做不到吧)
对课程:每年都会改进实验,教学等.这一点我学了两学期印象深刻.会尽力让我们学到的东西有用,向工业界靠近.讲课水平较高,并且会关注同学的反馈,如果有开小差严重会点到.
对成绩:原则是"不调分",该多少就多少.对于不及格的同学例外.会在出分之前给可能不及格同学改进实验的机会.
张昱老师的编译原理课,实验作业的量很大,一定要做好心理准备。由于张昱老师积极采用新技术,能学到不少东西。比如我 2012 年学的时候就要求使用 Git,而且不能只有一个 Git commit,要有一步步做出来的过程,commit message 还要有意义,这样基本就杜绝了抄袭。我们当年是 yacc + lex,据说后来用 clang + LLVM 取代了;我们当年是要求有 Makefile,据说后来用 cmake 取代了,都是与时俱进的。
缺交作业、缺课是万万不可的。我们那一级就有好几位同学挂科了。我的一位技术很强的学弟,因为参加国际超算比赛时间与期末考试冲突,张昱老师既不同意缓考,又不安排补考,这门挂科就影响了保研,导致他毕业只能去工作。还有一位学弟因为在北京的微软实习(联合培养博士项目),因为这门课不能缺课,只好终止实习回学校上课。
前20年学过最难的课程,不存在推荐不推荐,面对很多事情我们没有选择权利。课程实验量巨大,课本不太行,不能理解众多知识点,助教水平诚然比较高,但是有时候会从道德制高点说一些话让人敢怒不敢言,毕竟每次作业,实验给分都和助教息息相关。实验作业没有一点水分,费老大力气做了一半就是只有50分。考试没有一分的送分题,很灵活也确实很难。一学期在泥坑里摸爬滚打,在细雨中呼喊: 烧不死的鸟是凤凰
可能是我目前为止最认真的课程。
刚开学的时候感觉昱姐有点高冷(刚开学俺上课没认真听课,在写代码,突然昱姐叫大家都抬起头听课,把俺吓了一跳),后来发现昱姐人超级好啊,很快就和同学们气氛很轻松了,很多事情也很为同学们着想(比如疫情返乡时期叫我们不必为编译课担心,想回家就回;还有安排习题课在开学时,为了让我们考前记忆更深刻)。讲课也不错,我已经有好多课平时摸鱼期末看字补天了,但这门编译课确实听课比我看书来得快和形象。实验和作业稍微有点多,每次一布置作业我就会叫苦连连,吐槽自己为什么选这课遭罪受。但写完了又觉得没什么痛苦的(话说框架感觉确实有点内存泄露,用 address sanitizer 一堆奇奇怪怪的报错)。
在最后有一个 team work。刚开始感觉很难受(比如有点社恐找不到第三人、感觉自己很菜任务好难放假好想摸鱼),但最后在缺人且优化摆烂的情况下早早便完成了开摸了。感谢我的队友让我体验了从小到大最开心的一次组队!后来听汇报,感觉大佬们都好厉害啊,我还以为优化只能凭自己空想然后乱写、或者复现书上课上讲过的方式呢,好多大佬真的去看了 llvm 本身是怎么做的,然后简单复现了一下先进的做法。看得我目瞪口呆。
稍微有点体验不好的可能是考试了,考得有点抽象啊,期中感觉也认真复习了,但卷子就是不会写,弄得我心态很爆炸(题量好大,而且第一题心态直接崩了)。期末感觉都是意识流在答题。最后拿了个不高不低的分,感觉也一本满足了。
总之推荐选,没这种类型的课我会怀疑自己上了大专(。
怎么说呢。。。老师是有很有水平的,但可能是我个人的原因吧,课程内容理解得不是很好,复习时我甚至不会编译B的题(笑哭)。另外,本学期的助教都是寄科大佬,相当认真负责,可惜的是我没有相关的基础去和助教沟通,很多时候只能摸着石头过河。以上是我对这门课的整体感受。
对于老师和助教是respect!respect!respect!
以下是对nt的教务chu和信智学部的批判环节。依稀记得期中教学会议的时候网安这边的同学有提出这门课程跟得很费力,俞院长也深表赞同。然后信智学部或者jwc的不知名领导竟然来了一句都:“大学生就应该体验体验挂科的经历,就要学会面对困难(总之大致是这个意思)”。我xxx,都大三上了,没有补考没有重修,您是打算把ycb全送去考研是吧(麻了)。我始终认为,除了少数特例,真正nt和该骂的就是教务处这帮人。
算了,不说脏话了 ,对于自认为能力不差的网安同学可以不退英,对于其实只比普班同学强的有限的ycb同学,建议学海总的课编译B。编译H属于事多给分少,而且跟未来方向偏差过大了,也不知道这课表怎么排的
这门课确实是大三上最难的一门课,大概也是花时间最多的一门课,但是完全没有评课社区说的那么困难,实验也没有想象中那么困难,顶多是量大了一点并且由于之前没接触过这方面的东西所以上手慢一些而已。
每周基本上都有作业,每次作业也就两三道题,但是要想写全对还是需要花一些时间的,像我这种比较浪的人作业拿过一堆8分。。。
这学期实验一共有七个,前几个是熟悉编译工具和C++的高级特性,从第四个实验开始就是从头开始实现SysYF的编译器,包括词法文法构建、类型检查、IR生成、代码优化。实验刚上手可能有点困难,但是熟悉了就不难了,强烈建议先把算法的设计思路想清楚再动手编程,这样会大大降低出现奇怪的bug的概率。最后两个实验是小组合作完成,需要针对最后一个实验进行答辩,期间会有助教和同学提问。
扣的一分在于昱妈妈上课,节奏对我这样的菜鸡来说有点太快了,经常听不懂在讲什么,而且PPT里经常夹带私货。。。反正我个人觉得上课体验一般。
最后说说考试,期中期末都是24的卷面总分,达到20就算满分。貌似这学期考试比之前简单些?期中和期末好像都有6、7个20+的。考试内容就是上课讲的知识(这不废话么),平时作业都搞懂了问题不大。
这学期昱妈妈给分超好,喜提96
最后的最后,这学期实验的仓库Komorebi660/SysYF-Compiler: 2021年中国科学技术大学编译原理(H)课程实验项目 (github.com)希望对学弟学妹们有所帮助。
编译原理H正式撒花
zy老师上课很细心,也介绍了很多当下与时俱进的内容,单纯从课程内容来讲,真心觉得学到了很多有用的知识,很多地方没有跟上,也只能怪自己不够细心吧。
期中期末考试卷出的很独特,属于是那种复习了也没啥用,卷子上扣一分总评里就差不多扣一分,第一次在考完之后连书都懒得翻,因为书上不可能有。考试的时候属于是两道不会的题来回摆动的状态,最后期中期末考都考得不理想,也就是自己菜的缘故,希望张老师捞捞我~
接下来是想吐槽的两点,第一是实验的时候安排的有些许不合理,比如考试周结束还要写大实验并答辩。
第二是,作业布置在平台之后,标记了书上的题号却暗改了题目,好多时候对着书上相同题号做完被扣分了。。。
对于整门课程,个人觉得知识很有用,给人很多次恍然大悟和如梦初醒的感觉(虽然在未来生活中未必用得上),花了大量的时间和精力,最后结果可能和投入精力不太匹配,令本人有些深夜emo
张老师第一节课就感谢了大家,说知道自己给分不是很好大家却都愿意选自己的课,嗅探到一些信息(但还是只能给分出来后再评价给分吧)
老师和助教都很不错,我却只能给自己打5分
-----------------------------------------------------------------
昨天实验结束 今天就出分了 两次大考都比平均分低,后面实验样例测试结果也不是很好 最后给了85 算是满足辣!现在我给自己打6分,老师助教仍然都是满分
作业、实验:这门课个人感觉是大三上最难的一门课,同时也是负担最重的一门课。伴随着大量的作业和实验。作业每年应该会有少量变化,实验每年变化都挺大的,而且难度都不小,需要花大量的时间来学习有关的知识。当然这种变化也导致了助教、老师需要花费时间来设计实验,实验和课程的进度不能完全同步。期末前几周会有一个组队的项目,不过今年由于疫情后面很多考试都推迟到了下个学期,所以相比往年有不少的时间来做项目,答辩是在所有考试结束后的一两天。如果考试不推迟的话估计没有多少时间来做项目。建议可以再早一两周发布,否则在考试周很难有心情去用心搞项目
上课:目测老师每年都会更新自己的PPT,结合编译领域的一些新的应用。由于几节课才能讲完一个PPT,老师每次上课前也会修改PPT,这导致了一个PPT可能会有多个迭代版本,不利于整理笔记。个人感觉课程进度整体还是比较快的,特别是期中之后,很多PPT都只是点几个要点就过去了,需要自己下来结合课本学习,否则会有点云里雾里的感觉。老师会在课间点同学的名字,想尽量认识每位同学。
考试:不得不说这门课的考试难度很大,非常大。期中期末各24分的卷面,占总评的40分。开卷,甚至可以带iPad、笔记本电脑,不能上网查询,老师的本意是减少打印带来的浪费(印了可能也用不上)。卷面一般是4-5道大题,考察学生对知识的掌握、运用能力,基本上找不到原题。个人感觉最难的是让自己构造一些东西,比如期中会让你构造文法、手写语法制导的翻译。期末甚至四道题三道都是让自己构造,一个语法制导(或基于语法树)的中间代码生成器,一个语法制导(或基于语法树)的类型检查器,一个自己构造数据流方程解决数据流问题。个人建议复习的时候不要像计网那样注重细节,仅仅把书看一遍是完全不够的,要整体把握,多思考作业题、课后题等等。个人而言看懂书上的数据流、语法制导就要花不少功夫了,直接让我自己构造真的有点为难我了。同时还要注重老师上课举的一些例子,这些例子很可能就是考试中的一道大题。做题时最好先挑自己会做的,而不是顺着一道一道做
给分:个人感觉给分一般。这门课一般只有30+个人,就我们这一级的情况来看老师会在给分前把每个人的期中、期末卷子都复核一边,一方面可能是因为题目太难,助教也不好把控给分的规则、粒度,另一方面老师会帮你找一些得分点(当然这不代表你最后的总分就会高),或者说从中看出你对这门课的掌握程度。这之后老师对每个人的情况都有了大致的了解,后面可能会作为老师调分的依据吧
其他感受:张昱老师是一个很负责任的老师,这门课的质量也很高,这从每年都会更新PPT、更新实验和作业可以看出来。每年的卷子也是老师自己出的,题目也不断变化,有些题目甚至没有标准答案。考试的时候带了很多资料基本没啥用,全程跟着感觉走,想到啥写啥。基本上考试两个小时,前一个小时先把会做的做了,把能想到的写上去。后面一个小时就是在翻课本、习题集找类似的题目抄上去(骗分。我们这一级这门课出分应该是计科所有课程里最晚的,可能的原因是老师本身忙,各种开会且正好碰上研究生复试,这也使得学生们需要经历更长时间的煎熬的等分过程,结果和理想的分数还是有差距(悲,目测老师应该是向下调分了。
整体下来感觉英才班的几门H课在课程设置、考核方法上并没有很好的体验,如果让我重来一次我可能会早点退出英才班。
本科期间收货最大的一门课没有之一 具体来说: 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开发基本技能,接触一点也不是坏处
最后总评只比一个重修的低
做实验做破防了,量好大啊,问题真多,还总是要写对什么代码,文件结构等等的理解,还有实验中遇到的问题,分析和解决方案。有些问题里直接就是给一篇英文论文,然后对论文里的内容提问,这未免太费时间了。
老师还是很有水平的。最后给分中规中矩吧。
另外好像听说网安英才班的被计科英才班薄纱了,不知道真假。
你计还是真的卷啊,侧面反映出计科GPA的含金量之高
先说说这本教材,真的很难懂,有一堆莫名其妙的名词和表达,上下文也没什么逻辑,就像一本考前速成手册()
作业难度还行,前面的只要上课听了应该大部分没问题,后面的有些我实在看不懂就去参考往届学长的作业了。想吐槽的是有一次匿名互评作业,我看截止时间都过了还有一个同学没评我的作业,于是去问助教怎么回事,助教的回复是他也不知道然后就这样吧,我...???
期中真的一言难尽,我考得很差,第三题就是那种第一问语法制导算错了整题都没了,于是我总评-8预订了,ε=(´ο`*)))唉~
再说说实验,emmm,PW4词法语法分析挺难的我搞了好长时间,PW5类型检查稍微容易一点,PW6中间语言是组队实验(在此先感谢一波队友),附加的多维数组实现难度比较大但是好在时间足够多也磕磕绊绊地完成了,PW7原来是横跨考试周非常难受,现在ddl和答辩推迟到考试周结束后了,不过这样也就是说必须留校写实验了呜呜呜,回家时间++
这门课助教水平应该非常高,为什么是“应该”呢?因为我好像没有和助教有过交流都是听同学说的hhh
最后zy讲课很认真但是我基础不太行也经常听不懂她补充讲的一些东西,有些时候都是一个人在下面看PPT自学2333
给分已经不抱任何期望了毕竟纵向来看我没有掌握好要学的编译知识,横向来看几乎所有的英才班同学都比我更努力他们值得一份更好的成绩,但是期末还是要准备的(⊙﹏⊙)
首先今年课程有一些调整,大作业在接近期末的时候布置,且总体时间被大幅缩短,想着发paper的同学可以放弃了。educoder上的小实验工作量挺多的,而且总体上而言也比较简单(甚至可以说比较无聊)。感觉这门课总体上学不到什么很有价值的东西。
给分似乎不是太好,具体可以看20年的其他回答。
快跑!实验文档编排混乱,认真做也学不到东西。考试很阴间,复习没什么卵用。给分低于预期。李诚班不香吗?
出分了就可以来点评了。张昱老师的上课质量是有目共睹的,算是科大所有课程里顶尖的一批。整个课程的难度比较大,实验非常多,感觉有数据结构的两倍以上。但是都比较有价值所以收获很大。这个学期老师的给分似乎变好了,年前出分大家似乎都比较满意可以安心过年了。
另外这门课的除了本身的实验,下半学期是会有拓展实验的,可以自行选题也可以做老师在学期一开始就给出的课题。建议是尽早去跟老师的课题,因为这样有很多的时间调研,有更大概率做出有价值的成果,还没有实验室的同学甚至可以直接借此进老师的实验室。张昱老师绝对是模范老板,很适合当导师。如果这个拓展实验做得好甚至可以发出paper。完全靠自己选题由于要到下半学期才开始,无法有很多时间调研,而且还有各种期末考试,很难做出有价值的成果。最后的成果汇报老师是严格把关的,很难混过去。
这门课的实验中还是能学到很多东西的,包括养成看文档、源码解决问题的习惯,同时也在应对实验的同时意识到自己所能做到的比想象中要多。计院的课程实验还是挺水,有时候写完了感觉就是完成了作业这样子。。。完全没有自己收获了什么这种感觉,但这门课的实验还是不一样的。
但这种拔高带来的副作用就是很多问题就连助教可能也不能完全帮你解决。再加上助教态度不是很温和(不过设身处地的想,帮人debug还是挺头疼的)。。。而且今年的实验据说与去年不同,新花样玩起来总是有一些阻力的,各种环境啥的有点难配,而且一开头就让人直接编译llvm,而事实上,直到最后也不一定用得上这个编译的版本(除非要写checker,然而期末大家差不多都没这个心情了),有点浪费时间。再一个是C++很多人不熟,搞得这门实验像C++速成小课堂,浪费了大量时间在应付不熟悉C++特性引起的错误上。
再一个就是qq群的班级管理方式有点迷。个人觉得qq群用来锦上添花,分享额外的知识想法、抄抄答案(划掉)啥的还行,正儿八经ddl时间最好在网站和ppt上公布,并且上课强调。
此外就是teamwork比较鸡肋,分值少,所以大家都心照不宣没有搞实际项目,最后弄得像新生研讨课orz不如布置一个组队写代码的任务,就像一个额外的实验一样,毕竟团队协作调xia研bian大家其实见得太多,但合作写代码的经历还是蛮珍贵。
说了这么多然而期末征集意见的时候还是怂(눈_눈)只能寄希望于下届助教or学弟学妹能看到了。
另外,虽然一般大家会告诉你编译h实验最重要,但考试的卷面分是直接扣在总评上的啊啊啊(流下了考得烂的泪水)不过确实觉得这门课理论其实远比实验难得多,即使摸着良心瞎编出了能跑通测试的代码,但背后的实现机制,还有在使用一门语言时,以批判的眼光看待其局限、特性、创新之处,包括为什么要这样设计,那些依旧令我云里雾里的异端邪教的争论,我还是不明白啊(痛哭流涕)
但无论如何,这绝对是配得上名字后面那个H的一门课。希望它会越来越好(。・ω・。)ノ♡
没错我是来帮昱姐刷分的,课程质量有目共睹,老师的水平和志向也摆在那里,具体内容如上面两位大神所述,还没出分所以给分暂时没法评价只好给了一般,不过到了这一步也不在乎分数了。
嗨嗨嗨,来了奥。
感觉这门课其实挂了一个H的牌子,但是实际情况是似乎似乎实验并没有隔壁诚哥的难。
关于期中期末的话,其实考得都很基础,但是需要极高的熟练度。(期末考了一个我出的题的改编版,有些unfair)
张老师可以帮你涨很多有关语言的视野,这个还是比较关键的。
课程有那么一点晦涩难懂,例如标号回填那里,我感觉PPT没有一些C站的博客弄得好。
班强我菜~ QAQ
————9·27 update(先打个平均分)
To be continue
课程主页:http://staff.ustc.edu.cn/~yuzhang/compiler/
// 建议留出充足的时间写实验
见识了传说中的编译原理,其实也没那么可怕。卷面考试难度颇高,建议大家学习时注重理解和运用,多从实际应用的角度出发,对编译的理解会更深刻一些。
非英才班,本着不选这门课或许会成为一个遗憾的想法选了这门课,最后总评还不错。
跟非H班的同学交流过,感觉非H班的实验并不比H班的简单多少。非H班的实验貌似是代码全都要自己写,包括词法、语法分析之类的,而H班使用ANTLR,有完整的一套实验包,语法分析部分差不多就是抄一遍语法规范而已,难度要小很多。
加上H班好像没有优秀率限制,不用担心大佬多的问题,所以非英才班的同学还是可以考虑一下选这门课的。
感觉这门课难在要读两篇关于LL*、ALL*的论文并回答几个问题以及在考试周要完成的final project。final project自由选题,发布时间比较晚,临近考试周,会比较肝。本来想抱大腿来着,结果发现好多大佬都去做科研探索项目了。科研探索项目开始得比较早,人也比较多,期末应该没有那么肝。
补充:LLVM是完全没有必要自己编译的,可以直接在官网下载已经编译好的包。