上一章我們已經了解到,編程語言其實就是一種我們人類易于理解的程式語言,我們用這種編程語言撰寫的程式就稱為源代碼,這些源代碼是通過翻譯器這么個東西,被翻譯成二進制指令,從而讓計算機能夠執行我們的指令,
那么,這其中發揮很大作用的翻譯器又是怎么回事?
編譯型語言與解釋型語言
其實,翻譯器不止一種,我們根據翻譯器翻譯的時機,將它分為了編譯器和解釋器,
相應的,編程語言也分為了編譯型語言和解釋型語言,
編譯型語言要求將所有的源代碼通過編譯器轉換成二進制指令,也就是生成一個可執行程式(比如Windows下的.exe檔案),比如匯編語言、C語言、C++等都是編譯型語言,
解釋型語言,顧名思義就是將源代碼一邊轉換,一邊執行,就好像你閱讀文章一樣,讀到哪程式執行到哪,這種方式不需要生成可執行程式,使用會更加方便,比如Python、PHP、JavaScript、MATLAB等都是解釋型語言,
雖然文中對編譯器和解釋器講解的比較簡單,但事實上,翻譯源代碼的程序十分復雜,程序大致包括詞法分析、語法分析、語意分析、性能優化、生成可執行檔案等5個步驟,其中涉及到復雜的演算法和硬體架構,這一點本文不再贅述,
作業系統
另外大家需要了解的一點是,計算機程式都是運行在作業系統中的,目前我們比較熟知的作業系統平臺都有Windows、Linux、MacOS,當然這三種作業系統都不是瞬間誕生的,也都經歷了作業系統幾十年的發展,才完善成我們目前熟知的版本,
長時間不同發展,導致不同的作業系統平臺之間底層的內部結構截然不同,也就是說能夠在Windows系統運行的程式,拿到MacOS下便會無法運行,同理,能在Linux平臺下執行的程式,也不能在Windows平臺下執行,
另外,就算是相同的作業系統,不同的版本之間也不一定兼容,比如不能將Windows64位程式拿到Windows32位平臺下運行,但反之一般都可以,這是因為64位Windows對32位程式做了兼容性處理,這也是幾乎所有程式版本之間的通病,新版本可以兼容老版本,老版本兼容不了新版本,
除了程式不能跨平臺使用之外,源代碼也不能跨平臺使用,例如C語言中,可以讓程式暫停的“睡眠”函式,在Windows平臺下函式名是Sleep,但在Linux平臺下該函式名是sleep,首字母大小寫不同,而且函式中的引數含義也不同,Sleep的引數是毫秒,sleep的引數是秒,
這是一件相當麻煩的事情,這意味著同一個軟體,你不僅需要開發3種不同的源代碼,還要生成3種平臺的可執行程式,分別兼容Windows、Linux、Mac OS這3種平臺(現在大部分軟體都有不同作業系統下的版本就是因為這個原因),未來的更新維護也需要同時更新3個版本,而且,萬一以后新出來個鴻蒙作業系統,是不是又需要從頭開發新的版本呢?
當然,以程式員的勤勞度來看,是不會做出這么費力不討好的事情的,事實上,程式員有各種方法來解決這個問題,
比較經典的辦法,就是開發一套支持跨平臺的語言,誕生于1995年的Java就是其中的引領者,目前國內Java之所以火爆,很大部分原因就是Java的跨平臺特性,雖然后來微軟的C#也追隨了Java的腳步,但由于更新太慢,幾乎都要被人遺忘了,至于C語言,C++,由于太古老,它們誕生的時候還沒有作業系統呢,所以基本指望不上跨平臺了,
跨平臺語言運行原理
編譯型語言
事實上,關于跨平臺,編譯型語言和解釋型語言走上了不同的道路,雖然道路不同,但原理是一樣的,
比如Java這門語言,之所以能夠跨平臺,是因為它在作業系統上層,又搭建了一個叫做Java虛擬機(Java Virtual Machine,簡稱 JVM)的東西,你可以把JVM理解成一個底層軟體,而且針對不同的平臺有不同的版本:Windows版,Linux版、MacOS版,這三個版本的JVM安裝在了這三個平臺上,我們撰寫的Java源代碼會被JVM轉換成位元組碼,位元組碼是可以在Java虛擬機上運行的,流程如下圖:

Java語言運行流程
這樣一來,你只需要寫一份源代碼就可以了,只要在作業系統中安裝上對應的Java虛擬機,就可以平滑運行Java軟體了,所以Java打出的口號就是:一次編譯,處處運行,

編譯型語言運行原理
解釋型語言
相對于編譯型這種只有少數語言支持跨平臺的語言來說,解釋型語言幾乎都能跨平臺,“一次撰寫,處處運行”就是解釋型語言的特點,
那么為什么解釋型語言就能跨平臺呢?
這一切其實都歸功于解釋器,
解釋器其實就類似于Java虛擬機,也是編程語言與作業系統之間的中間層,官方會針對不同的平臺開發不同的解釋器,這些解釋器會把同樣的源代碼在不同的操作平臺下轉換成對應平臺“認識”的機器碼,兼容了不同平臺之間的差異,從而解決了跨平臺的問題,
編譯型和解釋型語言另外一個明顯的區別就是:
使用編譯型語言開發的可執行程式,源代碼是無法獲取的,所以程式一般是閉源的,
而解釋型語言由于一邊轉換一邊執行的特性,軟體下載下來的都是源代碼,否則就無法運行,所以解釋型語言的程式一般是開源的,

解釋型語言運行原理
關于Python
Python屬于解釋型語言,所以運行Python程式需要安裝對應平臺的解釋器,也就是說我們使用Python無需考慮不同平臺的兼容性問題,目前常見的如Linux、Windows、MacOS、Android、PocketPC等作業系統,Python都可以完美運行!
總結
我們將編譯型語言和解釋型語言的差異總結如下:
| 型別 | 原理 | 優點 | 缺點 |
| 編譯型語言 | 通過編譯器將源代碼轉換為作業系統平臺對應的機器碼 | 編譯一次,脫離編譯器也能運行,效率高 | 可移植性差,不夠靈活 |
| 解釋型語言 | 通過解釋器將源代碼轉換為作業系統平臺對應的機器碼 | 跨平臺性好 | 邊轉換機器碼邊執行,效率較低 |
原文鏈接:http://pythonjishu.com/compile-type/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527781.html
標籤:Python
上一篇:1.3 簡單用戶互動
下一篇:關于多種驗證碼的應對方式
