# 编译型与解释型编程语言的区别
前面我们知道了高级编程语言计算机是不能直接识别的,需要通过翻译成机器码然后交由计算机执行。
根据不同的翻译机制,又分为编译型和解释型。
注意,翻译源代码是一个非常复杂的过程,大致包括词法分析,语法分析,语义分析,性能优化,目标代码生成等五个步骤。在初学阶段没有必要研究这个,如果感兴趣可以阅读《编译原理》一书。
接下来我会使用通用的语言和类比的方式讲解编译和解释。
## 编译型
如果把高级编程语言编写的代码比作一篇英文文章,计算机比作一个不懂英文的人。那么,为了让这个人阅读这篇文章,可以找一名懂英文的翻译将这篇文章整体翻译成中文版。然后他就可以随时随地的阅读这篇翻译后的文章。
编译的过程其实跟上面翻译的过程很像。
编译型编程语言就是通过编译器(英文翻译)将源代码(编译型编程语言编写的程序,类比英文文章)编译(翻译)成可执行文件(翻译后的文章)。
![1658829684074](https://wcflove.gitee.io/images/1658829684074.png)
可执行文件可以在任何支持的平台上,脱离编译环境运行。因为可执行程序就是机器码,所以它的执行效率高。但是编译型编程语言一般是不能跨平台的,也就是说不能在不同的操作系统间任意切换, 并且修改程序也非常不方便,只要源代码修改了,都需要重新编译生成新的可执行文件。C语言,C++就是典型的编译型编程语言。
## 解释型
接上面的类比,翻译这篇英文文章,还可以通过随身电子词典,逐字逐句的边看边翻译。
解释型编程语言就是通过解释器(电子词典)将源代码(解释型编程语言编写的程序)逐行解释成机器码,然后交由计算机执行。
![1658904942703](https://wcflove.gitee.io/images/1658904942703.png)
解释型编程语言编写的程序离不开解释器,因为是边翻译边执行所以相对效率不高,但是修改起来非常方便,只要源代码修改了,下一次执行就是修改后的代码。解释型编程语言大都可以跨平台运行,这归功于解释器。Python,php就是典型的解释型编程语言。
## 关于Python
Python属于典型的解释型编程语言,支持所有常见的平台,例如Linux,Windows,Mac OS, Android, FreeBSD等等,只要在不同的平台上安装了对应的解释器,代码就可以正确运行,一般不需要担心任何兼容性问题,真正做到了"一次编写,到处运行"。
另外,关于执行效率,你可能会看到很多人说python的执行效率差。那只是相对而言,随着硬件性能的提升,和很多优化手段,python在某些时候执行效率甚至会超过c语言,所以忘记这个效率问题,全心全意的学习python吧。
## 总结
总结编译型编程语言与解释型语言的区别如下表:
| 类型 | 原理 | 优点 | 缺点 |
| ---------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------- |
| 编译型语言 | 通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。 | 一次编译,多次运行,脱离编译环境,并且运行效率高。 | 可移植性差,不够灵活。 |
| 解释型语言 | 由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。 | 跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。 | 一边执行一边转换,效率不搞。 |
~~~
- 第1章 编程基础
- 零基础能学Python吗?
- 编程语言是什么
- 编译型与解释型编程语言的区别
- python是什么?
- 学python能干什么?
- 第2章 python开发环境搭建
- windows下安装python
- cmd命令行工具
- 环境变量如何设置?
- 如何运行python程序?
- 学习神器Jupyter lab
- 第3章 基本数据类型
- 基本数据类型概述
- 变量的定义和使用
- 整数类型
- 浮点数类型
- 算术运算符
- 赋值运算符
- 字符串类型
- 字符串常用方法
- 字符串格式化
- 列表类型
- 元组类型
- 可变与不可变类型
- 深浅拷贝
- 集合类型
- 字典类型
- 布尔型
- NoneType
- 第4章 程序流程控制
- 程序结构
- if分支语句
- while条件循环
- for循环
- 循环控制关键字
- 异常处理
- 第5章函数与代码复用
- 函数的定义和调用
- 函数的参数
- 函数的返回值
- lambda函数
- 变量作用域
- python内建函数
- 第6章 面向对象
- 类和对象
- 属性
- 方法
- 继承
- super()函数
- 多态
- 私有化
- 自省与反射机制
- 第7章 模块和包
- 模块
- 包
- 第三方库
- 第8章 文件IO操作
- 文件概述
- 字符编码
- 字节类型
- python读取文件
- python写文件
- 文件指针