再来说说为什么我打死了也不学编译。在古代,程序员使用汇编编程,效率低下,非常痛苦。只有那些高手才能用汇编做大事。软件行业的繁荣不能只靠几个高手,更需要成千上万的码农。IBM的Backus,29岁,决心改变这种现状。编程语言是Fortran,但当时人们对编译理论知之甚少,开发工作复杂而艰巨。这时,语言学家乔姆斯基对自然语言结构的研究给编译器带来了惊喜。1957年,经过三年的努力,终于完成了Fortran编译器。突破第一个编译器后,高级语言如雨后春笋般涌现。最著名和最有影响力的是C和C++。编译器的理论和实践逐渐成熟。后来甚至出现了生成编译器的生成器Lex和Yacc。程序只是编译器的一部分,编译器的基本结构通常分为三个部分。对于一个公司来说,在开发一个编译器的时候,很少会投入多个前后端的开发,这样就无法做到通用和共享。后来,开源的GCC编译器率先打破了这种模式。GCC开源、跨平台、支持多前后端,很快成为Unix和Linux的标准编译器。围绕GCC,一个编译王国若隐若现。Apple也决定使用GCC来编译自己的Objective-C,但Objective-C毕竟是小众语言。随着时间的推移,GCC逐渐不能满足Apple的需求。GCC仍然是一个“单体应用程序”,很难嵌入到其他应用程序中。就在这时,一位大神凭空诞生。2005年,ChrisLattner加入Apple,负责Apple的编译器、XCode等工具的开发,以及LLVM社区的开发。他不负众望,让Objective-C大放异彩,开发了一款名为Clang的LLVM编译器前端,支持C、C++、Objective-C。模块化的LLVM吸引了众多语言的加入。不仅如此,现在还有很多领域需要编译技术,但并不需要完整的编译器。模块化LLVM可以大放异彩。在过去的60年里,编译器从最早的高级语言变成机器码,到专注于后端优化,最后到了模块化的阶段,LLVM成为了新的王者。后记:《编译原理》是一门比较难的课程。和很多同学聊天的时候,有人说:编译太抽象,太无聊了,也有人说:打死我也不学编译(这句话给我的印象极其深刻,直接如题)。其实不学编译对日常工作影响不大。大家主要是直接把编译器当作工具来使用,对内部实现并不了解。真正从事编译器开发的人很少。但是,学习编译原理可以帮助程序员加深对编程语言和计算机系统的理解。如果你有余力,建议你看一看。
