談笑間解答--編譯器和解釋器

菜鳥常常將編譯器和解釋器弄混淆,無奈之下,因而向高手請教。php

高手說:windows

「解釋器是一條一條的解釋執行源語言。好比php,Python就是的解釋性語言。 後端

 編譯器是把源代碼整個編譯成目標代碼,執行時不在須要編譯器,直接在支持目標代碼的平臺上運行,這樣執行效率比解釋執行快不少。好比C語言代碼被編譯成二進制代碼(exe程序),在windows平臺上執行。」ide

菜鳥說:「我仍是不明白,能給個形象的比喻麼?」spa

高手說:「給你講個故事。」翻譯

  • 母親打電話給兒子說:「你爸最近身體很差,家裏人少不熱鬧」。orm

      兒子想,對啊,爸年紀大了,身體很差,買點犛牛骨髓壯骨粉不錯,因而兒子就去超市買了犛牛骨髓壯骨粉。blog

   兒子又想啊,最近黃金搭檔很火,買點給爸試試。因而兒子又去買了黃金搭檔。開發

   從超市回來後,兒子又尋思母親說的「家裏不熱鬧」,嗯,家裏的小皇帝自從上寄宿學校後就比較少回來,估計是老人家想孫子了。兒子因而給上高中的兒子打了個電話,讓他週末回來看看。get


  


  • 母親打電話給女兒說:「你爸最近身體很差,家裏人少不熱鬧」。


  女兒就想,應該給爸作點什麼呢?因而她拿出張紙開始羅列條目,先寫上了壯骨粉和黃金搭檔。而後,想着讓老人家看看外孫應該不錯,因而就在紙上加上了一句,一家人回爸媽那裏看望看望。最後紙上就寫着:

  1.壯骨粉和黃金搭檔

  2.一家人去看望爸媽

      女兒見到女婿後,就將這張紙上的信息編成短信發給了工做的女婿。

  女婿一看就明白了,下班後先去超市買了補品,而後開車回家帶着妻兒就去看望岳父岳母了。

 

      想到什麼了嗎?

菜鳥說:

我這樣說不知道對不對:兒子就像是解釋器,是想到一點作一點。女兒就像編譯器,女婿就像平臺,女兒聽完後,在紙上羅列出全部要作的事情,女婿就按着指示辦事了。

 高手說:

就是這樣的。兒子對於母親的話是一條一條執行,女兒是將母親的話整個翻譯成平臺能理解的目標語言--短信,整個由女婿直接執行。後者的執行效率會更高。


  從功能上看,解釋器和編譯器確實不同。

  然而,從流程和結構上看,兩者卻很是類似。

  兒子和女兒聽到母親的話之後,都是從兩個方面來思考:老人的身體和老人對小輩的思念。以此爲據,兒子和女兒都作出了本身的決定。只不過一個直接去作了,另外一個卻將所要作的事情翻譯成另外一種載體--短信--給存儲起來。


      解釋器和編譯器也是如此,讀入源語言後,解釋器和編譯器都要進行詞法分析、語法分析和語義分析,以後,兩者開始有所分別。解釋器在語義分析後選擇了直接執行語句;編譯器在語義分析後選擇將將語義存儲成某一種中間語言,以後經過不一樣的後端翻譯成不一樣的機器語言(可執行程序)。以下圖所示:

wKiom1iauynieTY4AAD5uuCCZ8I345.jpg-wh_50

總之,解析器和編譯器它們在功能上是不同的,然而從結構上看卻有諸多相同,並且在開發時也並無本質上的差異,這也是不少人將兩者混淆的緣由之一。到底是開發解析器仍是編譯器?只須要依據功能上的實際須要來作出決定就ok了。

相關文章
相關標籤/搜索