深入浅出编译原理简明教程(一):什么是编译?编译原理的学习介绍和好处

一、为什么学编译原理?如何学习?

编译原理是计算机技术中相当基础的一门技术,同时它也是计算科学中技术含量较高的一门学科,它和算法、数据结构、编程语言等都有非常密切的联系,对这些相关技术的深入学习提供基本的理论基础,所以学好编译原理不但对该技术非常重要,而且对于学习相关的技术也非常重要,掌握编译原理你才有机会掌握更多的技术。

编译原理介绍

对于从事计算机相关开发的人员来说,不但可以深入理解编程语言的理论和实现方式,而且可以在工作中运用编译原理解决相关技术难题,比如需要设计新的语言,并开发新的编译器。

编译原理对前端开发和后端开发同样重要,我们使用的所有语言都离不开编译器,比如我们可能想知道,编译语言、解释语言和脚本语言之间有什么区别?你真的了解IDE吗?每一句代码都是什么意思?编译原理对于理解C/C++编程也更为重要,如果你是IT开发中,对于编译原理的学习一定不要错过。

编译原理偏重理论的理解,同时也含有相关的实践,在本系列教程中,我们将一起来学习编译原理的理论知识和相关的算法选择、以及数据结构的选择,理解理论的同时也需要结合实际的操作,而不是对理论过于形式上的理解而没有深刻的现实理解。

二、什么是编译?

编译是将计算机高级语言编译成汇编语言或者机器语言的过程,如下图:

编程语言转换成机器语言

高级语言是指我们常用的java、php、python、javascript等,这些语言的语句表达比较语义化,能够直观地看得懂其编程代码的意思,而且也适合大型程序的开发。

汇编语言和机器语言是类似的,机器语言表示能被机器直接认识和执行的1和0,而汇编只是这些1和0组合的一个助记号,所以汇编语言只是机器语言的一种简要记号。在实际开发中实现简单的加减算法都需要非常复杂的编程,另外汇编语言只能在特定的平台上运行,比如ARM和X86平台都有其完整的一套汇编语言。

编译是什么呢?编译就是将高级语言的代码转换成机器实际能执行的1和0,编译的结果文件叫做字节码文件。

实际开发中,源代码构建成可执行文件过程中,在编译前还会有预处理器,预处理器处理宏指令等,比如C/C++中的宏。当项目中有多个源代码文件的时候,将所有源文件编译后还需要使用链接器,将所有字节码文件进行链接处理,如图:

源代码编译过程

上图是一个C/C++源码编译的整个流程,其它语言类似,gcc是编译器。

当项目的源码越来越多的时候,一个个编译源文件就会变得非常麻烦,这时候就有了辅助构建工具,比如linux上常见的make和makefile,makefile是用于配置项目源码的相关编译,make用于执行执行makefile文件,另外还有更强大的cmake等,它们都用于简单自动地执行源码编译过程,并生成目标文件。

如果你没怎么用过make也不要紧,那你或者听过后端开发中的ant,maven,gradle,前端开发中webpack,这些都是构建工具,而构建工具一般都需要结合一个配置文件进行使用。

本系列的文章主要围绕编译器的结构和内部原理进行讨论,以上是对编译的一个大体讲解,接下来的文章我们会提供更详细的讲解,谢谢阅读!

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?