从 源代码 转化成 机器指令 (计算机能执行的形式)需要翻译器
翻译器:解释器 interpreter 和 编译器 compiler
解释器:将源代码转化成一些动作,并立即执行这些动作。
BASIC就是一个流行的解释性的语言。
Python语言解释器,先把整个程序转化成某种中间语言,然后由执行速度更快的解释器来执行
优点:速度快,源代码现存,错误很好找。
缺点:解释器必须驻留内存以执行程序,速度就很慢。大型项目。内存空间受限制,需要一次性导入源代码。
编译器:直接把源代码转化成汇编语言,或者机器指令。
结果就是一个或者多个机器代码文件。
优点:编译生成的程序只需要很少的运行空间,执行速度更快。
C语言是 分段编译 separate compilation:先分段,再把各段程序连接成一个完整的可执行的程序。
Python也支持 分段编译。
为了提高编译速度,一些编译器采用 内存中编译 in_memory compilation 对于小程序而言,内存中编译跟解释器一样响应。
编译过程:
C/C++:1.首先对源代码进行预编译 preprocessor 预处理器是一个简单的程序。
对预处理过的代码进行语法分析。编译器把代码分解成小的单元并把他们按树形结构组织起来。
由代码生成器 code generator遍历语法分析树,把每个节点转化成汇编语言或机器代码。最后得到是一个以.o或者.obj文件
object:目标 goal 面向对象里面:object是一个有边界的事物。
2.linker 连接器:把一组目标模块连接成一个可执行程序。操作系统可以装载和运行它。
连接器 处理函数之间的引用 ( 搜索 库 文件)