C/C++编译器如何工作?

Jus*_*cle 33 c c++ compiler-construction compiler-optimization

经过十多年的C/C++编码,我注意到了以下模式 - 非常优秀的程序员倾向于详细了解编译器的内部结构.

我是一个相当优秀的程序员,我有一个特殊的编译器"迷信"集合,所以我想重新启动我的知识并从基础开始.

有人可以推荐在线资源或喜欢的书籍链接吗?我对C/C++编译,优化,GCC和LLVM特别感兴趣.

sou*_*wal 28

从龙书开始....(更多关注代码优化和代码生成)

去编写一个玩具编译器,用于教育编程语言,如Decaf或Cool ..,你可以使用解析器生成器(lex和yacc)作为你的前端(让生活更轻松,专注于更多的东西)....

然后阅读gcc internals book以及浏览gcc源代码.

  • 我建议不要试图了解GCC.就编译器而言,这是相当不寻常的,而且其设计在设计上很差(因为设计在目的上是残缺的.是的,我是认真的.不,我不只是在GCC开玩笑). (3认同)
  • 谢谢,顺序很好.我拿龙书是:http://en.wikipedia.org/wiki/index.html?curid = 188976 (2认同)
  • 是的,那是龙书.我读了第1版.它有一个更简单的龙.... (2认同)
  • 嘎.人们一直在推荐这个.不是我.从一个随意的介绍开始---说"让我们构建一个编译器"---然后看看计算机科学参考所有的数学和理论. (2认同)

NoM*_*ots 11

编译器文本很好,但是对于自己教学来说它们有点沉重.Jack Crenshaw有一本"书",这是一系列文章,你可以下载并阅读"Lets Build a Compiler".它遵循"边做边学"的方法,如果你没有从这个主题的正式课程中得到任何东西,或者它已经花了太多年了(这是我的情况).它牵着你的手,引导你通过编写编译器,而不是用Lambda微积分和只有学术界关心的深层理论问题来打扰你.这是一个很好的方式来激发那些只有在Vax(YEAH,那是一个VAX!)许多月前在学校写东西的模糊记忆的脑细胞.它的编写非常简单,易于坐下来阅读,不像大多数教科书需要几罐咖啡才能超越第一章.一旦你有了理解的基础,那么更多的传统文本,如龙书,是扩展你的理解的伟大参考.(而且我个人喜欢Dead Tree版本,我打印出Jack's,在舒适的位置阅读比在笔记本电脑上阅读更容易.而电子书阅读器太昂贵了,因为某些东西实际上并不像你在阅读真实的书.)

有些人可能称之为"缺点"是它是用Pascal编写的,但我认为这让我更多地考虑它,而不是有人给我一个有效的C程序开始.从那时起,它就以68000编写,仅在此时才用于嵌入式系统.对我而言,这不是一个问题,我知道68000 asm和68000 asm比其他一些asm更容易阅读.


J-1*_*DiZ 9

如果你想要死树版,试试编译器设计的艺术:理论与实践.