- 已编辑
- 本帖长期收集关于编译原理相关的资源
(接MingLLuo )
编译原理就是CS的屠龙术(观龙书封面有感)
很显然,作为一名还未上过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的函数式编程,为啥推荐它?
来到第一门推荐的编译课,用OCaml实现编译器Brown CSCI1260 Compilers and Program Analysis,除了Recording不公开,其他都很全,暑假我会过一遍这门课,不会OCaml也没关系,跟着指引走就行。
更多人知道Stanford CS143,不过我没有深入学习,可以看看CSDIY的评论区怎么说
国内有一门比较受欢迎的编译课,来自南京大学(好多好课呜呜呜),你可以通过link来访问相关资源,b站也有课程视频
这些课程的难度可能对大多数朋友来说,具有挑战性(这里忽略语言),因为他们并不只是从零到一,还更深入的学习了一些知识,都很重要,但对于看到这个帖子只想要期末不挂科的人来说,还是太过深入辣,或者说,方向错辣
- 这一门编译课是不对外公开的,整一门课就是带你从零到一实现一个编译器,想要学习的朋友需要自己摸索(SFU cmpt379),资源很全,感谢NULL哥
诶,不选龙书你就选着刷课是吗,不不不,还是要看书的,先列出来吧,等以后我读完再写感想
- Modern Compiler Implementation in C(现代编译原理:C语言实现):常称虎书
- Engineering a Compiler:已经出到第三版,国内的翻译还没跟上,建议读第三版
- CRAFTING INTERPRETERS:最近很受欢迎的一本书
- Compilers: Principles,Techniques,and Tools(龙书):要看要看
(PS:读书不一定要从头读到尾,更应该有体系框架,选择性的读,让我连着读上面四本还不如...)
说了一堆废话,我会在暑假怎么学?
- 主要聚焦于CSCI1260/CRAFTING INTERPRETERS/Engineering a Compiler,我会优先阅读完CRAFTING INTERPRETERS,学习CSCI1260(可能还有379),其他书作为参考资料
- 暑假怎么久这么点很轻松吧?答:...感觉学习量小多,而且还有其他要学和整理的东西(CS咕咕咕Plan)
- 一起学吧!答:很欢迎,不过我提倡先自学,有问题就提,在没有人带的情况下小组学习进展会有些问题?
- PL去哪了?答:来了来了,系统学习可以看Software Foundations,我还没机会看。。。所以我根本就不懂PL
暂时不扯这么多了,大家肯定都看烦了,等我熬过期末再看看怎么修改和补充吧
v0 2023.6.15(also typo fix