編譯器和解釋器之間有什么區(qū)別

導(dǎo)讀:本文就從幾個方面著重介紹一下編譯器和解釋器的區(qū)別枯途,令我感到意外的竟然是編譯器比解釋器既更快又更慢个曙。

根據(jù)他們的定義察郁,編譯器和解釋器之間的區(qū)別貌似十分明顯:

  • 解釋器:直接執(zhí)行用編程語言編寫的指令的程序
  • 編譯器:把源代碼轉(zhuǎn)換成(翻譯)低級語言的程序

如果繼續(xù)深入了解伙菜,可能會發(fā)現(xiàn)兩者之間的界限有些模糊轩缤。

實際上,解釋器可以將源語言轉(zhuǎn)換成某種中間形式(或語言)來加速執(zhí)行贩绕,這就是這類語言通常依賴于虛擬機的原因火的,而這自然會導(dǎo)致一些問題:

  • 所有使用虛擬機的語言都是解釋型語言嗎?
  • 他們其實是編譯運行的嗎淑倾?

你可能會認為上面的答案都是 yes馏鹤。

到底什么才是編譯器或解釋器的所有部分?你可以在學(xué)術(shù)界找到這樣的問題的精確和技術(shù)性的答案娇哆,或者可以在 StackOverflow 上找到有關(guān)這些問題的討論湃累。

對于開發(fā)人員甚至是語言創(chuàng)作者來說,真正的重要性在于與他們的區(qū)別迂尝。 兩者都有優(yōu)點和缺點脱茉,實際上一些語言可以同時具有解釋器和編譯器,有的還不知一個垄开。

主要觀點仍然是:解釋器立即執(zhí)行代碼琴许,編譯器為稍后的執(zhí)行準備好源代碼。所有實際的差異都因為他們有不同的目標溉躲。

如何分發(fā)程序

實際上榜田,一個重要的區(qū)別是編譯器生成一個獨立的程序益兄,而解釋的程序總是需要解釋器來運行。

如果你有一個編譯的程序箭券,你不需要安裝其他任何東西就可以運行起來净捅,這使得分發(fā)十分簡單。 另一方面辩块,可執(zhí)行文件在一個特定平臺上運行:不同的操作系統(tǒng)和不同的處理器需要不同的編譯版本蛔六。

如果要解釋程序,可以將不同平臺上的相同副本分發(fā)給用戶废亭。 然而国章,他們需要一個在其特定平臺上運行的解釋器。所以可以分發(fā)源代碼或中間產(chǎn)物豆村。

跨平臺支持

這是一個技術(shù)上的區(qū)別液兽,其后果:使用解釋型編程語言更容易制作跨平臺程序

那是因為在大多數(shù)情況下掌动,您只是為解釋器平臺創(chuàng)建一個程序四啰。 解釋器本身會將其轉(zhuǎn)化為真實平臺的適當形式(例如Windows / Linux 和 x86 / ARM)。 當然粗恢,必須注意的每個平臺還有一些差異柑晒。 一個很常見的例子是目錄分隔符。

編譯程序時适滓,需要注意每個平臺之間的所有小差異敦迄。 這部分原因是編譯語言往往是較低級的語言恋追,比如 C ++凭迹,所以它們可以讓你更少的訪問系統(tǒng)。 但另一個原因是正在使用的所有類庫都需要自身來支持不同的平臺苦囱, 所以如果他們不支持 Windows嗅绸,你的程序就不能支持 Windows。

速度

在需要考慮速度的情況下撕彤,有一個矛盾:編譯器比解釋器既更快又更慢鱼鸠。 許多人都知道編譯的程序比解釋的程序執(zhí)行起來要快得多,但這只是冰山一角羹铅。 簡單來講蚀狰,就執(zhí)行而言,確實是編譯后執(zhí)行的編譯型程序執(zhí)行的快些职员,但是編譯型程序的編譯加執(zhí)行的時間比解釋性語言解釋執(zhí)行的時間多麻蹋。

編譯器確實產(chǎn)生更快的程序,這是因為它必須把每個語句分析一次焊切,而解釋器必須每次都分析一次扮授,此外芳室,編譯器還可以優(yōu)化其生成的可執(zhí)行代碼。 這既是因為它確切地知道它將在哪里運行刹勃,并且需要時間來優(yōu)化代碼堪侯。

Debugg

在使用解釋器比使用編譯器時,調(diào)試更容易荔仁,有幾個原因:

  • 解釋器只有一個可執(zhí)行文件伍宦,不需要用于開發(fā)的調(diào)試版本,也不需要最終用戶的發(fā)行版本乏梁;
  • 使用解釋器的平臺特定錯誤較少雹拄;
  • 由于解釋器即時轉(zhuǎn)換代碼,源代碼中的信息仍然可用掌呜;
  • 由于解釋器一次執(zhí)行一個語句滓玖,因此更容易發(fā)現(xiàn)錯誤。

開發(fā)工具

雖然這在實踐中都是對的质蕉,但這似乎不太適用势篡。 事實上,如果你考慮你的經(jīng)驗模暗,你可能會發(fā)現(xiàn)調(diào)試 JavaScript 比調(diào)試 C ++ 更難禁悠。這是為什么? 部分是由于語言本身的設(shè)計兑宇,JavaScript 使用動態(tài)類型碍侦,而 C ++ 使用靜態(tài)類型,后者更容易早日發(fā)現(xiàn)錯誤隶糕。 但最終歸結(jié)為開發(fā)工具的原因瓷产,手工編譯 C ++ 是很困難的,所以大多數(shù)人使用 IDE 來開發(fā)枚驻,另一方面濒旦,您可以輕松地使用文本編輯器和命令行工具來開發(fā) JavaScript。

話雖如此再登,如果我們把它們放在同一個環(huán)境中尔邓,每個人都有一個很棒的 IDE 和支持工具,情況恢復(fù)正常锉矢。通過查看逐行和實時發(fā)生的情況梯嗽,更容易地測試和調(diào)試。

原文:The difference between a compiler and an interpreter - Federico Tomassetti - Software Architect
“本譯文僅供個人研習(xí)沽损、欣賞語言之用灯节,謝絕任何轉(zhuǎn)載及用于任何商業(yè)用途。本譯文所涉法律后果均由本人承擔(dān)。本人同意簡書平臺在接獲有關(guān)著作權(quán)人的通知后显晶,刪除文章贷岸。”

延伸閱讀:

歡迎關(guān)注:

  • 知乎專欄「極光日報」偿警,每天為 Makers 導(dǎo)讀三篇優(yōu)質(zhì)英文文章。
  • 極光開源項目:「Aurora UI」唯笙,一個通用 IM 聊天 UI 組件螟蒸。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市崩掘,隨后出現(xiàn)的幾起案子七嫌,更是在濱河造成了極大的恐慌,老刑警劉巖苞慢,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诵原,死亡現(xiàn)場離奇詭異,居然都是意外死亡挽放,警方通過查閱死者的電腦和手機绍赛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辑畦,“玉大人吗蚌,你說我怎么就攤上這事〈砍觯” “怎么了蚯妇?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長暂筝。 經(jīng)常有香客問我箩言,道長,這世上最難降的妖魔是什么乖杠? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任分扎,我火速辦了婚禮澄成,結(jié)果婚禮上胧洒,老公的妹妹穿的比我還像新娘。我一直安慰自己墨状,他們只是感情好卫漫,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肾砂,像睡著了一般列赎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镐确,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天包吝,我揣著相機與錄音饼煞,去河邊找鬼。 笑死诗越,一個胖子當著我的面吹牛砖瞧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嚷狞,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼块促,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了床未?” 一聲冷哼從身側(cè)響起竭翠,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎薇搁,沒想到半個月后斋扰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡啃洋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年褥实,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裂允。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡损离,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绝编,到底是詐尸還是另有隱情僻澎,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布十饥,位于F島的核電站窟勃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逗堵。R本人自食惡果不足惜秉氧,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜒秤。 院中可真熱鬧汁咏,春花似錦、人聲如沸作媚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纸泡。三九已至漂问,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚤假。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工栏饮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磷仰。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓抡爹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芒划。 傳聞我的和親對象是個殘疾皇子冬竟,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容