`
php教程分享
  • 浏览: 11508 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序员都应学习代码编译器知识

阅读更多
所有优秀的计算机科学学院都提供了编译器课程,但是相对比较少的学校把它作为本科课程的必修部分。这篇文章回答了这个问题:为什么需要学习编译器知识?即使你从没打算过编写编译器。
我写这篇文章的其中一个原因是,尽管我在读本科时很喜欢编译器课程,但是我几乎看不到它的实际作用。大多数资料看起来要么简单易懂,要么很深奥(事实上,我找到的大部分编译器资料都是很枯燥的。)无论怎样,我用了几年时间总结了为什么这类课程会如此有用的实际原因。原因如下。
分析器和解析器无处不在
严谨的php程序员不得不去了解分析器和解析器,因为我们不会总是只写一些小程序。每次你写一个可扩展的程序或处理一种新类型的输入文件,你都需要了解它们(分析器和解析器)。格林斯潘第十定律:
“任何C或Fortran程序复杂到一定程度之后,都会包含一个临时的、只有一半功能的、不完全符合规格的、充满bug的、运行速度很慢的Common Lisp实现。”
我们花费如此多的时间在这些事情上,我们可以使用一次性的小技巧来做这些事情的每一个,或者我们利用60年的理论和实际知识去解决问题,并把它做对。重要的是:你应该什么时候借用已存在的代码或者使用已存在的工具?理论知识在什么时候可以提供帮助?哪些语言设计原则可以运用在我们日常使用的小语言?
你能更好地编写正确的代码
编译器应该把输入的语言正确地翻译成合法的程序。为了达到这个目标,编译器开发者必须了解整个输入语言,包括一些普通程序员没见过的罕见问题。这个理解过程是通往程序语言本质的重要一步,它和我们平时写代码时所看到的不一样。举个例子,我在学习了顺序点(sequence points),未定义行为(undefined behaviors),和常用的算术转换的细节后,完全改变了我对C语言的理解。C编译器编写者已经掌握这些概念了,但大多数初级和中级程序员都不知道这些概念。毫不夸张地说,一旦你知道语言的本质,你会以不同地方式和更准确地思考这个语言。这适用于任何的语言,特别是像C和C++这些语义不清晰的语言。
你可以编写更快的代码
通过了解编译器,你可以很清晰地知道哪些优化是编译器可以优化的,和哪些是编译器不能进行优化的,无论他们看起来是多么的合理和简单。你将会学到哪类代码通常会建造最佳代码块,为什么会这样和这些代码做了什么。你会知道为什么一些代码可以拥有更好的性能,比如使用一半寄存器组缓存滤波系数一半寄存器组缓存样本的FIR滤波器,它和使用普通优化器实现的不一样。你和你喜欢的编译器是一个能创建快速代码的团队,你可以使用它高效地工作,或者使用提前优化等无意义的技巧来修改它。
其次,编译器后端是与目标架构密切关联的,当然,现代的架构都尽量提供汇编程序员友好的平台,而且离着不远了。通过理解编译器后端和它为什么是这样产生代码的,你会对计算机架构的操作有更好的理解。
总结
编译器(理论上)有三部分:
1.语言相关的前端(分析,类型检测)
2.与语言和目标无关中端(优化))
3.目标相关的后端(生成机器代码)
在这篇文章里,我已经试图说服你们,理解编译器的每一部分都是有价值的–即使你将来不会实现或者修改它们。
免费领取LAMP兄弟连原创PHP视频教程光盘/《细说PHP》精要版,详情咨询官网客服:
http://www.lampbrother.net
分享到:
评论

相关推荐

    为什么每个程序员都应该学习代码编译器知识

    每个程序员都应该学习代码编译器知识,因为编译器不仅是将源代码转化为可执行程序的工具,而且深入了解编译器的运作机制可以帮助我们编写出更高效、更清晰的代码。以下是一些关于编译器及其相关知识的重要点: 首先...

    为什么每个程序员都应学习代码编译器知识

    编译器知识是每个程序员都应该掌握的关键领域,虽然在许多本科课程中可能不是必修,但它对于提升编程技能和理解程序执行本质具有深远影响。以下是一些关于编译器及其重要性的详细解释: 首先,分析器和解析器是编程...

    C语言编译器源代码

    在这里,我们将深入探讨C语言编译器的源代码所包含的知识点。 首先,我们需要了解编译器的基本工作流程,它通常包括五个主要阶段:词法分析、语法分析、语义分析、中间代码生成和目标代码生成。这些阶段涉及到了...

    vc做的C代码编译器.rar_C编译器_Vc_c++编译器_c_minus_vc++编译器

    总的来说,“vc做的C代码编译器”是一个适合学习和实践的工具,它可以帮助我们更好地理解和运用C语言,同时提供了可能的C++兼容性,对于提升编程技能和深入编译器原理有着积极的作用。通过使用和研究这个编译器,...

    C语言编译器源代码.rar

    源代码是程序员用高级语言(如C语言)书写的程序,而编译器是连接这些源代码与硬件执行之间的桥梁。在深入探讨C语言编译器的源代码之前,我们需要先理解编译器的基本工作原理。 编译器通常分为几个主要阶段:词法...

    编译器源代码分析

    总的来说,"编译器源代码分析"是一个深度探讨编程语言理论和实践的课题,涉及了计算机科学的多个核心概念,对于软件工程师、计算机科学家和教育工作者来说,都是不可或缺的知识领域。通过学习和分析Pascal—S和C0...

    C_C++程序员大全 代码+学习软件

    学习C/C++还需要理解编译器的工作原理,比如GCC(GNU Compiler Collection)或Clang,它们将源代码转换为可执行文件。理解编译错误和警告信息也是提高编程技能的关键步骤。此外,熟悉Makefile可以有效地组织和构建...

    Cminus编译器C++代码

    在编译原理课程设计中,学生通常会学习如何构建一个简单的编译器,理解词法分析、语法分析、语义分析以及代码生成等关键步骤。下面我们将深入探讨这些知识点。 1. **词法分析**:这是编译器的第一步,负责将源代码...

    gcc编译器源代码

    GCC源代码的学习可以帮助你理解编译器的工作原理,这对于软件开发人员特别是那些想要深入底层、优化性能或构建自定义编译器的人来说至关重要。glibc-2.4文件可能是Linux环境中使用的GNU C Library的一个版本,它是...

    VC++60程序员指南配套代码

    《VC++60程序员指南配套代码》是一份针对微软...总之,《VC++60程序员指南配套代码》是一个宝贵的教育资源,它将理论与实践紧密结合,对于任何想深入了解和掌握VC++6.0开发环境的程序员来说,都是不容错过的学习资料。

    C语言文本编译器源代码

    【C语言文本编译器源代码】是一个专为初学者设计的学习资源,旨在帮助他们理解编译器的工作原理以及如何用C语言实现一个简单的文本编译器。在深入探讨这个项目之前,我们先来了解一下C语言和编译器的基础知识。 ...

    C编译器源代码(超级牛b)

    《C编译器源代码解析:打造IBM80x86汇编的神奇之旅》 在编程世界中,编译器扮演着至关重要的角色。...因此,无论你是初学者还是经验丰富的程序员,这款“C编译器”源代码都是一个不容错过的宝贵学习资源。

    程序员重点知识点串讲

    总结来说,程序员的重点知识串讲应涵盖以下几点: 1. 编程语言基础:理解不同编程语言的语法、数据类型、控制结构、函数和类等概念。 2. 库文件和API:熟悉各种库的功能,如何正确调用API进行功能实现。 3. 编译器和...

    vc++编译器源代码

    编译器是一种特殊的程序,它负责将程序员用高级语言(如C++)书写的源代码转换为计算机能够理解的机器语言。这个过程分为几个主要阶段:词法分析、语法分析、语义分析、优化以及目标代码生成。每个阶段都涉及复杂的...

    tinycompiler一个js写的微型编译器可以用来学习编译器的入门知识

    今天我们要探讨的是“tiny-compiler”,一个由JavaScript编写的微型编译器,它为学习编译器基础知识提供了一个直观的入口。 tiny-compiler项目是开源的,基于JavaScript,这使得它对前端开发者和对JavaScript有热情...

    代码反编译器YingJAD

    未经许可的反编译商业软件可能会侵犯知识产权,因此在使用YingJAD或其他反编译器时,应确保遵循适当的法律条款和道德规范。 总之,YingJAD作为一个小巧且实用的反编译工具,为初级程序员提供了一个方便的入口,让...

    C 编译器原理 编译器构造

    了解这些基础知识有助于程序员更好地调试和优化代码,同时对软件工程中的编译系统设计也有深入的理解。在实际开发中,理解编译器的工作方式可以帮助我们避免常见的编译错误,提升代码质量和效率。如果你有兴趣深入...

    编译器及编译器生成器

    在阅读"编译器与编译器生成器(C++版).pdf"这份文档时,你可能会深入学习到以下知识点: 1. **词法分析**:识别源代码中的词汇单元,如关键字、标识符、运算符和常量,将其转化为符号表供后续阶段使用。 2. **...

    uedit编译器查看编译代码工具

    **UEdit编译器:强大的源代码编辑器** UEdit是一款功能强大的文本编辑器,尤其在编程领域中被广泛使用,作为查看和编译源代码的工具。它提供了丰富的特性,帮助开发者高效地进行代码编写、调试和管理。以下是关于...

Global site tag (gtag.js) - Google Analytics