一文了解解釋型語言和編譯型語言之區別

引言


我們學了這麼久的編程,做了那麼多的項目,但總有那麼一些概念即模糊又清晰,比如我們今天要細談的解釋型語言和編譯型語言。


何謂解釋?何謂編譯?


這一切要從我們學習C語言的時候開始。

一文了解解釋型語言和編譯型語言之區別

所有學過C語言的同學都清楚,C語言在執行前一定要先編譯一下,如果發現語法錯誤,就會發出編譯不通過的提示。而C語言就是一種編譯型的編程語言,那什麼又是解釋型的語言呢?


這又要從我們學習MATLAB說起,話說呀,我們寫完MATLAB代碼之後是不是直接點執行就等待結果了,如果有那一句代碼發生錯誤的話,程序就執行到那一句才會停下來報錯,所以MATLAB是一種一邊執行一邊解釋的語言,解釋是一句一句的翻譯。,從而不需要預先進行編譯,所以稱之為解釋型語言。

一文了解解釋型語言和編譯型語言之區別

說以上兩個例子,只是給大家一個很好的概念去快速理解什麼是編譯以及解釋。但是我們還有一個話題就是:


為什麼會有這兩種類型的編程語言?


人們搞這兩個東西有什麼好處呢?


我想最主要的因素就是:編譯性語言不如解釋性語言跨平臺性好,也就是說不同平臺的兼容性有區別,所以才有了兩種語言。


編譯性語言例如c語言:用c語言開發了程序後,需要通過編譯器把程序編譯成機器語言(即計算機識別的二進制文件,因為不同的操作系統計算機識別的二進制文件是不同的),所以c語言程序進行移植後,要重新編譯。(如windows編譯成ext文件,linux編譯成erp文件)。


解釋性語言例如java語言,java程序首先通過編譯器編譯成class文件,如果在windows平臺上運行,則通過windows平臺上的java虛擬機(VM)進行解釋。如果運行在linux平臺上,則通過linux平臺上的java虛擬機進行解釋執行。所以說能跨平臺,前提是平臺上必須要有相匹配的java虛擬機。如果沒有java虛擬機,則不能進行跨平臺。


這個原因說明白了之後,我們來看看兩種語言有哪些代表呢?

編譯型語言代表有:C語言和C++。


解釋型語言代表有:js,php,MATLAB,java和javascript。


編譯型與解釋型的共同點

他們都要弄成二進制代碼才能執行,兩類編程語言的源代碼都是英文,但是我們的計算機並不認識英文,所以都要轉化成二進制才能執行。區別就在於“轉化的方式”不一樣,請見下文分析。

編譯型與解釋型的不同點


1.從運行效果上來看。編譯型語言要等全部寫完後通過編譯器去生成一個類似*.exe的二進制文件,然後雙擊這個文件才可以看到效果。


而解釋型語言並沒生成*.exe文件,而是直接生成效果,這就是我之前提到的的那個C語言和MATLAB的例子。


2.運行的時候是否需要編譯器的伴隨。編譯型語言運行的是最終生成的二進制代碼,所以不需要編譯器伴隨。


而解釋型語言則一邊解釋一邊運行,所以運行的時候很可能還有部分代碼沒有解釋好,所以需要編譯器伴隨(解釋型語言把該工具叫做解釋器)。


有人會問編譯器(解釋器)在哪裡呢?


舉個例子,網頁的解釋器就在瀏覽器中,所以要看HTML的效果必須用瀏覽器或者有編譯工具在內的其他工具打開,比如:模擬瀏覽器的工具。


3.執行的速度對比。編譯型語言運行的已經是完全的二進制內容,運行起來十分乾淨利落,所以速度很快。


而解釋型語言運行的不一定是完全的二進制內容,因為它是一邊解釋成二進制一邊運行。


所以當它執行看出效果的時,程序後半部分還不一定解釋成二進制,它就像一個“三心二意”的男人。所以像那種三心二意的男人說話有時吞吞吐吐的,速度沒有前者快,但是CPU的運行速度如果很快,可能看不出來,只是偶爾會看到“有點卡”的效果。


原因就是它一邊解釋一邊運行,你看到效果的後面可能還有一少半的代碼沒解釋成二進制,所以看到的效果會是殘缺的。這就是為什麼有時候查看網頁,先是出現一堆沒有佈局的文字,然後才出現那種佈局好的效果。


4.可移植性對比。編譯型語言是運行二進制內容,所以一旦CPU指令系統改變,那麼之前的二進制文件可能運行不了。比如,如果到其他硬件平臺上運行,就可能出現錯誤,就需要根據該平臺重新編譯出新的二進制文件。所以可移植性、平臺兼容性比價差。


而解釋型語言則沒有弄成什麼二進制內容,而是在需要的時候才開始編譯、運行。所以它自然具有可移植性,即在任何平臺都可以馬上運行起來。


要注意的是它的解釋工具如:瀏覽器,本身就是編譯型語言解釋出來的二進制代碼,所以瀏覽器本身不具備可移植性,是需要針對不同的平臺弄出對應的瀏覽器最終二進制文件的,這裡可別混淆。


5.升級上對比。編譯型語言弄出來的二進制文件若要升級,自然要重新下載一個新的二進制文件。所以重新下載、安裝、覆蓋是最大的特點。比如微信的升級,就是要重新下載、重新安裝、重新覆蓋,等個半天而且很耗費CPU資源,體驗性就不大好。


而解釋型的語言只要重新寫好源代碼即可,用戶想要最新的效果,只要刷新一下即可,所以體驗性好。比如:某網站平臺升級了,用戶只要重新刷新一下。


6.應用領域,編譯型語言應用領域通常是那些安裝軟件,例如桌面上的安裝軟件。解釋型的語言的應用領域通常是互聯網、網站等那種刷新了一下就可以看到最新效果的領域。

結論

兩類編程語言都各有優勢和劣勢,無絕對的正確和錯誤之分,大家仁者見仁智者見智。


分享到:


相關文章: