2018年10月1日編譯型語言和解釋型語言的區別
計算機語言的發展:
- 機器語言
- 組合語言
- 高階語言 c++, java
計算機不能直接理解高階語言,只能直接理解機器語言(即計算機識別的二進位制檔案,因為不同的作業系統計算機識別的二進位制檔案是不同的,因為不同系統的指令用不同的二進位制程式碼來表示),所以c語言進行移植後要重新編譯,而解釋性語言會根據當前機器的指令集進行相應的機器碼解釋。
所以任何高階語言編寫的程式若想被計算機執行,都必須將其轉換成計算機語言,也就是機器碼。
而這種轉換方式有兩種:
- 編譯
- 解釋
所以高階語言也就分為了編譯型語言和解釋型語言兩種:
編譯型語言:c, c++, Delphi,java,等
解釋性語言: c#, python,Ruby, javascript
java語言,java程式首先通過編譯器編譯成class檔案,如果在windows平臺上執行,則通過windows平臺上的java虛擬機器(VM)進行解釋。如果執行在linux平臺上,則通過linux平臺上的java虛擬機器進行解釋執行。所以說能跨平臺,前提是平臺上必須要有相匹配的java虛擬機器。如果沒有java虛擬機器,則不能進行跨平臺
編譯型語言和解釋性語言的區別:
編譯型語言使用專門的編譯器,針對特定的作業系統平臺,在編譯型語言寫的程式執行之前
編譯型語言比解釋型語言消耗的記憶體少。
缺點:
編譯器比直譯器要難寫的多。
編譯器在你除錯程式碼的時候提供不了多少幫助,而直譯器在你除錯程式碼的時候可以給你非常準確的錯誤資訊。
但是編譯結果與特定的平臺相關,一般無法移植到其他平臺。
程式執行效率高,依賴編譯器,跨平臺型差。
編譯型語言不支援程式碼中實現安全性,一個編譯型的程式可以訪問記憶體中的任何區域,可以對你的PC做任何想做的事情,所以大部分病毒都是使用編譯型語言編寫的。
解釋型語言:
在程式執行之前不進行編譯而是在程式執行的時候對程式進行翻譯.,一行一行地翻譯,每次執行執行都需要進行解釋,所以執行速度較低
跨平臺性較好,在不同的平臺上使用不同的直譯器就可以對程式進行解釋執行。
平臺獨立性,以及嚴密的安全性是使解釋型語言成為適合網際網路和Web應用的理想語言的2個最重要的因素。
缺點是:
解釋型語言會佔用跟多的記憶體和CPU資源,因為解釋型語言執行的時候,相關的直譯器必須首先執行,
直譯器如果進行程式碼優化的話也是可以大幅度提高解釋型語言的執行速度的。