1. 程式人生 > 其它 >計算機重要概念:程式碼

計算機重要概念:程式碼

關於程式碼,需要知道的幾個概念

高階語言程式碼 High-Level Code

高階語言程式碼,自然是指由高階程式語言編寫程式碼,對計算機的細節有更高層次的抽象。
相對於低階程式語言(low-level programming language)更接近自然語言(人類的語言)。
整合一系列的自動工具(垃圾回收,記憶體管理等),會讓程式設計師延長壽命,更快樂的編寫出更簡潔,更易讀的程式程式碼。

低階語言程式碼 Low-Level Code

低階語言程式碼,指由低階程式語言編寫的程式碼,相對高階語言,少了更多的抽象概念,更加接近於彙編或者機器指令。
但是這也意味著程式碼的可移植性很差。

在我看來,高與低,只是一組相對詞而已。
越高階的語言,效能、自由度越不及低階語言。
但是在抽象、可讀可寫性、可移植性越比低階語言優秀。
在以前的年代,C/C++語言相對組合語言,機器指令來說,肯定是高階語言。
而到了今天,我們更多人對C語言偏向認知為「低階語言」。

組合語言 Assembly Language

組合語言作為一門低階語言,對應於計算機或者其他可程式設計的硬體。
它和計算機的體系結構以及機器指令是強關聯的。
換句話說,就是不同的組合語言程式碼對應特定的硬體,所以不用談可移植性了。
相對於需要編譯和解釋的高階語言程式碼來說,彙編程式碼只需要翻譯成機器碼就可以執行了。
所以組合語言也往往被稱作象徵性機器碼(symbolic machine code)

位元組碼 Byte Code

位元組碼嚴格來說不算是程式語言,而是高階程式語言為了種種需求(可移植性、可傳輸性、預編譯等)而產生的中間碼(Intermediate Code)。
它是由一堆指令集組成的程式碼,例如在javac編譯過後的java原始碼產生的就是位元組碼。

原始碼在編譯的過程中,是需要進行「詞法分析 → 語法分析 → 生成目的碼」等過程的,在預編譯的過程中,就完成這部分工作,生成位元組碼。
然後在後面交由直譯器(這裡通常指程式語言的虛擬機器)解釋執行,省去前面預編譯的開銷。

是一種包含執行程式、由一序列 op 程式碼/資料對 組成的二進位制檔案。
位元組碼是一種中間碼,它比機器碼更抽象,需要直譯器轉譯後才能成為機器碼的中間程式碼。

總結:位元組碼是一種中間狀態(中間碼)的二進位制程式碼(檔案)。需要直譯器轉譯後才能成為機器碼。

機器碼 Machine Code

機器碼是一組可以直接被CPU執行的指令集,
每一條指令都代表一個特定的任務,或者是載入,或者是跳轉,亦或是計算操作等等。
所有可以直接被CPU執行的程式,都是由這麼一系列的指令組成的。
機器碼可是看作是編譯過程中,最低階的程式碼,因外再往下就是交由硬體來執行了。
當然機器碼也是可以被編輯的,但是以人類難以看懂的姿勢存在,可讀性非常差。