標籤:

編譯型語言和解釋型語言區別之我見

編譯型語言和解釋型語言區別之我見

來自專欄 寧哥編程實戰課堂

但凡學習編程,總會碰到這個看似清晰實質又模糊的概念:編譯型&解釋型。

那麼到底什麼是編譯型語言,什麼是解釋型語言呢?他們之間有什麼共同點和區別呢?

下面我從自身的體會去理解和分析一下,希望能對學編程的後來人能起到「拋磚引玉」之效。

編譯型語言代表有:C語言,C++

解釋型語言代表有:js,php

-----------------------------------共同點-----------------------------------

都要弄成二進位代碼,才能執行。

兩類編程語言,你手寫的源代碼 都是那些if,else之類的英文單詞,計算機並不認識這些單詞,所以都會要轉化成二進位才能運行。

區別就在於「轉化的方式」。

-----------------------------------區別-----------------------------------

區別1:從效果上來比

編譯型語言要全部寫完之後,然後通過某個編譯器,去生成一個類似*.exe的二進位文件,然後手工雙擊這個文件才看的到效果;

解釋型語言則沒生成你看的到的那種.exe文件,而是直接發出效果。

那麼區別之一就是:是否顯性的生成二進位文件供你去雙擊。

區別2:運行的時候是否需要編譯器

編譯型語言運行的是最終的二進位代碼了,所以不在需要編譯器在身邊守護。

但解釋型語言則不然,它是邊解釋、邊運行,所以運行的時候很可能還有部分代碼沒有解釋好,所以需要編譯器守護(解釋型語言把該工具叫:解釋器)。那麼編譯器在哪裡?就在瀏覽器里,所以你要看html效果,必須是用瀏覽器這種工具,或者有編譯工具在內的其他工具,如:模擬瀏覽器的工具。

區別3:執行速度對比

編譯型語言由於運行的已經是完全的二進位內容了,所以運行起來很乾凈利落,自然速度快。

但解釋型語言,運行的不一定是完全的二進位內容,因為它是邊解釋(成二進位),邊運行。所以當它執行看出效果的時候,程序後半部分還不一定解釋成二進位呢。所以它是「三心二意」的做事,速度沒有前者快,但是CPU的運行速度如果很快,你可能看不出來,偶爾會看到「有點卡」的效果。原因就是:它邊解釋、邊運行,你看到效果了,可能還有一少半的代碼沒解釋成二進位呢,所以你看到的效果會是殘缺的,這就是為什麼查看網頁的時候,很容易就看到這樣的情況:先是出現一堆沒有布局的文字,然後才出現那種布局好的效果。

區別4:可移植性對比

編譯型語言是運行二進位內容,所以:一旦CPU指令系統改變,之前的二進位文件可能運行不了。比如:如果到其他硬體平台上運行,就可能出現錯誤,就需要根據該平台重新編譯出新的二進位文件。所以:可移植性差;

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

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

區別5:升級上對比

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

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

區別6:應用領域

編譯型語言應用領域通常是那些安裝軟體,如:桌面上的那種安裝軟體;

解釋型的語言的應用領域通常是:互聯網,網站等,那種刷新了一下就可以看到最新效果的領域。

-----------------------------------實現原理-----------------------------------

實現原理,簡單來說就是:是不是做成了「實時採集」;

編譯型語言沒有做「實時採集」。它選擇了一次性解決問題,表現為:先弄出完整的二進位代碼之後,再讓用戶去執行該二進位代碼,這樣省事、省力、省心。但造成可移植性差、升級麻煩的後果。

解釋型語言,採用了「實時採集」的措施,做成「邊解釋、邊運行」。但這樣帶來的直接弊端就是:邊走邊看,因此速度自然要慢一些。不過現在的CPU、內存等硬體能力都很強大,這個方面的影響可以忽略。而它帶來的非常便捷的升級,讓它更顯示出獨特的魅力。所以它在移動互聯網的領域,在只要刷新一下就可以看到最新效果的領域,是獨一無二的霸主。

結論:二者都是客觀事物,各有優勢和劣勢,沒有絕對的正確和錯誤之分,所以學習者也要客觀的認識。


推薦閱讀:

Xhgui+Tideways的使用
PHP7 出來之後,HHVM 還有什麼優勢嗎?
你的網站主機支持PHP7了嗎?
PHP高效獲取遠程圖片尺寸和大小的實現方法
28歲轉行,決定入坑IT崗位,短期幾個月先學習哪個方向合適?

TAG:PHP | C編程語言 |