Java 的集合體系 Java集合可分為兩大體系:Collection 和 Map 1.常見的Java集合如下: Collection介面:單列數據,定義了存取一組對象的方法的集合 List:元素有序(指的是存取時,與存放順序保持一致)、可重覆的集合 Set:元素無序、不可重覆的集合 Map介面:雙 ...
前面我們知道了高級編程語言電腦是不能直接識別的,需要通過翻譯成機器碼然後交由電腦執行。
根據不同的翻譯機制,又分為編譯型和解釋型。
註意,翻譯源代碼是一個非常複雜的過程,大致包括詞法分析,語法分析,語義分析,性能優化,目標代碼生成等五個步驟。在初學階段沒有必要研究這個,如果感興趣可以閱讀《編譯原理》一書。
接下來我會使用通用的語言和類比的方式講解編譯和解釋。
編譯型
如果把高級編程語言編寫的代碼比作一篇英文文章,電腦比作一個不懂英文的人。那麼,為了讓這個人閱讀這篇文章,可以找一名懂英文的翻譯將這篇文章整體翻譯成中文版。然後他就可以隨時隨地的閱讀這篇翻譯後的文章。
編譯的過程其實跟上面翻譯的過程很像。
編譯型編程語言就是通過編譯器(英文翻譯)將源代碼(編譯型編程語言編寫的程式,類比英文文章)編譯(翻譯)成可執行文件(翻譯後的文章)。
可執行文件可以在任何支持的平臺上,脫離編譯環境運行。因為可執行程式就是機器碼,所以它的執行效率高。但是編譯型編程語言一般是不能跨平臺的,也就是說不能在不同的操作系統間任意切換, 並且修改程式也非常不方便,只要源代碼修改了,都需要重新編譯生成新的可執行文件。C語言,C++就是典型的編譯型編程語言。
解釋型
接上面的類比,翻譯這篇英文文章,還可以通過隨身電子詞典,逐字逐句的邊看邊翻譯。
解釋型編程語言就是通過解釋器(電子詞典)將源代碼(解釋型編程語言編寫的程式)逐行解釋成機器碼,然後交由電腦執行。
解釋型編程語言編寫的程式離不開解釋器,因為是邊翻譯邊執行所以相對效率不高,但是修改起來非常方便,只要源代碼修改了,下一次執行就是修改後的代碼。解釋型編程語言大都可以跨平臺運行,這歸功於解釋器。Python,php就是典型的解釋型編程語言。
關於Python
Python屬於典型的解釋型編程語言,支持所有常見的平臺,例如Linux,Windows,Mac OS, Android, FreeBSD等等,只要在不同的平臺上安裝了對應的解釋器,代碼就可以正確運行,一般不需要擔心任何相容性問題,真正做到了"一次編寫,到處運行"。
另外,關於執行效率,你可能會看到很多人說python的執行效率差。那隻是相對而言,隨著硬體性能的提升,和很多優化手段,python在某些時候執行效率甚至會超過c語言,所以忘記這個效率問題,全心全意的學習python吧。
總結
總結編譯型編程語言與解釋型語言的區別如下表:
類型 | 原理 | 優點 | 缺點 |
---|---|---|---|
編譯型語言 | 通過專門的編譯器,將所有源代碼一次性轉換成特定平臺(Windows、Linux 等)執行的機器碼(以可執行文件的形式存在)。 | 一次編譯,多次運行,脫離編譯環境,並且運行效率高。 | 可移植性差,不夠靈活。 |
解釋型語言 | 由專門的解釋器,根據需要將部分源代碼臨時轉換成特定平臺的機器碼。 | 跨平臺性好,通過不同的解釋器,將相同的源代碼解釋成不同平臺下的機器碼。 | 一邊執行一邊轉換,效率不搞。 |