# 編譯型與解釋型編程語言的區別
前面我們知道了高級編程語言計算機是不能直接識別的,需要通過翻譯成機器碼然后交由計算機執行。
根據不同的翻譯機制,又分為編譯型和解釋型。
注意,翻譯源代碼是一個非常復雜的過程,大致包括詞法分析,語法分析,語義分析,性能優化,目標代碼生成等五個步驟。在初學階段沒有必要研究這個,如果感興趣可以閱讀《編譯原理》一書。
接下來我會使用通用的語言和類比的方式講解編譯和解釋。
## 編譯型
如果把高級編程語言編寫的代碼比作一篇英文文章,計算機比作一個不懂英文的人。那么,為了讓這個人閱讀這篇文章,可以找一名懂英文的翻譯將這篇文章整體翻譯成中文版。然后他就可以隨時隨地的閱讀這篇翻譯后的文章。
編譯的過程其實跟上面翻譯的過程很像。
編譯型編程語言就是通過編譯器(英文翻譯)將源代碼(編譯型編程語言編寫的程序,類比英文文章)編譯(翻譯)成可執行文件(翻譯后的文章)。

可執行文件可以在任何支持的平臺上,脫離編譯環境運行。因為可執行程序就是機器碼,所以它的執行效率高。但是編譯型編程語言一般是不能跨平臺的,也就是說不能在不同的操作系統間任意切換, 并且修改程序也非常不方便,只要源代碼修改了,都需要重新編譯生成新的可執行文件。C語言,C++就是典型的編譯型編程語言。
## 解釋型
接上面的類比,翻譯這篇英文文章,還可以通過隨身電子詞典,逐字逐句的邊看邊翻譯。
解釋型編程語言就是通過解釋器(電子詞典)將源代碼(解釋型編程語言編寫的程序)逐行解釋成機器碼,然后交由計算機執行。

解釋型編程語言編寫的程序離不開解釋器,因為是邊翻譯邊執行所以相對效率不高,但是修改起來非常方便,只要源代碼修改了,下一次執行就是修改后的代碼。解釋型編程語言大都可以跨平臺運行,這歸功于解釋器。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寫文件
- 文件指針