編譯 Compile:把整個程序源代碼翻譯成另外一種代碼,然后等待被執行,發生在運行之前,產物是「另一份代碼」。
解釋 Interpret:把程序源代碼一行一行的讀懂然后執行,發生在運行時,產物是「運行結果」。
高級語言代碼 High-Level Code
高級語言代碼,自然是指由高級編程語言編寫代碼,對計算機的細節有更高層次的抽象。
相對于低級編程語言(low-level programming language)更接近自然語言(人類的語言)。
集成一系列的自動工具(垃圾回收,內存管理等),會讓程序員延長壽命,更快樂的編寫出更簡潔,更易讀的程序代碼。
低級語言代碼 Low-Level Code
低級語言代碼,指由低級編程語言編寫的代碼,相對高級語言,少了更多的抽象概念,更加接近于匯編或者機器指令。
但是這也意味著代碼的可移植性很差。
在我看來,高與低,只是一組相對詞而已。
越高級的語言,性能、自由度越不及低級語言。
但是在抽象、可讀可寫性、可移植性越比低級語言優秀。
在以前的年代,C/C++語言相對匯編語言,機器指令來說,肯定是高級語言。
而到了今天,我們更多人對C語言偏向認知為「低級語言」。
或許未來世界的開發者,看我們現在所熟悉的Java、PHP、Python、ECMAScript等等,都是「low」到爆的語言。
匯編語言 Assembly Language
匯編語言作為一門低級語言,對應于計算機或者其他可編程的硬件。
它和計算機的體系結構以及機器指令是強關聯的。
換句話說,就是不同的匯編語言代碼對應特定的硬件,所以不用談可移植性了。
相對于需要編譯和解釋的高級語言代碼來說,匯編代碼只需要翻譯成機器碼就可以執行了。
所以匯編語言也往往被稱作象征性機器碼(symbolic machine code)
字節碼 Byte Code
字節碼嚴格來說不算是編程語言,而是高級編程語言為了種種需求(可移植性、可傳輸性、預編譯等)而產生的中間碼(Intermediate Code)。
它是由一堆指令集組成的代碼,例如在javac編譯過后的java源碼產生的就是字節碼。
源碼在編譯的過程中,是需要進行「詞法分析
→ 語法分析 → 生成目標代碼」等過程的,在預編譯的過程中,就完成這部分工作,生成字節碼。
然后在后面交由解釋器(這里通常指編程語言的虛擬機)解釋執行,省去前面預編譯的開銷。
機器碼 Machine Code
機器碼是一組可以直接被CPU執行的指令集,
每一條指令都代表一個特定的任務,或者是加載,或者是跳轉,亦或是計算操作等等。
所有可以直接被CPU執行的程序,都是由這么一系列的指令組成的。
機器碼可是看作是編譯過程中,最低級的代碼,因外再往下就是交由硬件來執行了。
當然機器碼也是可以被編輯的,但是以人類難以看懂的姿勢存在,可讀性非常差。
Mark: Java is often called a compiled language, while Python is called an interpreted language
Reference:
1.版權聲明:本文為CSDN博主「NumX」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/baidu_36316735/article/details/58148449
2.http://huang-jerryc.com/2016/11/20/do-you-konw-the-different-between-compiler-and-interpreter/
浙公網安備 33010602011771號