很显然,作为一名还未上过yulian课的人,似乎无法把握清楚学院的编译原理会讲什么,会上成什么样,观察了课程的目录,我愿将编译原理拆分成两门课:
- 形式语言与自动机
- 编译器
等等,两门课???
没错,教学安排涉及的内容就应该这样分解出来,并且应该认真对待,可见在一学期顺着讲下来(加上一些教学问题),学生的收获会如何可以预见?
所以,我的推荐会直接划分成两个Part,内容较多会涉及英文课程/书本资源的分享并借此向外延伸(函数式语言,编译语言(PL)...)
温馨提示,本人还没有深入学习编译的内容,接下来一切的一切都是经验+立Flag+吹水
形式语言与自动机
- 推荐:Introduction To The Theory Of Computation(Sipser)
本科阶段提前接触自动机,正则表达式等计算理论知识的人可能没有1/10(这里不提22级,毕竟大一就上ITOC~)
我是通过ITOC(计算理论导引)了解这部分知识的,暂时不列出其他资源(没去学),可以去B站大学看看
编译器
龙书作为一本编译相关的经典图书,值得读,但我更倾向于其他选择。
编译,是将编程语言所写的代码翻译成其他语言(机器码,字节码或者其他),能够正确的转换代码成为我们的首要目的
PS:为什么要转化代码?答:可能你自己设计了一种语言,需要正确执行,你可以把它翻译(归约?这个描述貌似也不错)成C语言并且使用gcc/clang等强大的编译器。绕了一圈,你写C代码想跑得用它。
PS:为什么要学习编译原理?答:编译原理说起来其实很抽象,也不抽象,它既有形式化的文法定义,也有...作为计算机专业的学生,以后都是要成为“码农”的人,了解计算机提供的抽象不就是学计算机的应该做的吗(手动滑稽,很多代码的优化工作可能还是需要我们干预,即使现在AI大火(反正我挺期待学习Compiler的),(省去部分例子以及我说不出来的事情)
我们继续,这里我想给出一篇论文An Incremental Approach to Compiler Construction(莎莎推荐的,要不然遇不到它了),作者用简洁的形式带读者实现了一个支持大部分语法的Scheme编译器,写这个帖子前我又看了一遍
- 什么是Scheme?这是一种函数式语言。
- 什么是函数式语言?这是xxx(自行Wiki)
阅读这篇论文前,你需要了解Scheme的语法,与其如此,不如直接学吧!(开玩笑的,随你)
- CS61A的最后部分学习了Scheme,你可以跟着那部分的内容学习
- SICP原版使用Scheme编写,可以参考阅读,不过想学还是看61A吧
- TL;DL(Too Long(Time to Learn); Didn't Learn):直接看这个link,或者找找速成资料
现在很多语言都支持函数式编程特性(C++/Python...),如果了解了Scheme,可以尝试实现一个Scheme解释器(61A Project),或者看Fluent Python关于Scheme的interpreter(132 Lines in Python)
接下来看论文,你就能大概摸清编译在做什么了(你也可以直接阅读)
时间可能不够啊,我也觉得,大二暑假不去实习不就有大把时间?(本人妥妥的废物,暑假只能呆在家里学习)
都来到函数式语言了,在此夹带点私货,快来学OCaml吧!你可以通过CS3110了解OCaml的函数式编程,为啥推荐它?
这些课程的难度可能对大多数朋友来说,具有挑战性(这里忽略语言),因为他们并不只是从零到一,还更深入的学习了一些知识,都很重要,但对于看到这个帖子只想要期末不挂科的人来说,还是太过深入辣,或者说,方向错辣
- 这一门编译课是不对外公开的,整一门课就是带你从零到一实现一个编译器,想要学习的朋友需要自己摸索(SFU cmpt379),资源很全,感谢NULL哥
诶,不选龙书你就选着刷课是吗,不不不,还是要看书的,先列出来吧,等以后我读完再写感想
(PS:读书不一定要从头读到尾,更应该有体系框架,选择性的读,让我连着读上面四本还不如...)
说了一堆废话,我会在暑假怎么学?
- 主要聚焦于CSCI1260/CRAFTING INTERPRETERS/Engineering a Compiler,我会优先阅读完CRAFTING INTERPRETERS,学习CSCI1260(可能还有379),其他书作为参考资料
- 暑假怎么久这么点很轻松吧?答:...感觉学习量小多,而且还有其他要学和整理的东西(CS咕咕咕Plan)
- 一起学吧!答:很欢迎,不过我提倡先自学,有问题就提,在没有人带的情况下小组学习进展会有些问题?
- PL去哪了?答:来了来了,系统学习可以看Software Foundations,我还没机会看。。。所以我根本就不懂PL🥲
暂时不扯这么多了,大家肯定都看烦了,等我熬过期末再看看怎么修改和补充吧
v0 2023.6.15(also typo fix