中文是一種盡量用簡短文字表達更多含義的語言,所以很多時候一句話的含義很容易曲解成別的意思。最近,有人提出C語言是一種中級語言的概念,所以特意介紹一下低級語言和高級語言的區(qū)別。
最初的編程語言是機器語言(machine language),它和硬件系統(tǒng)緊密相連。機器語言是計算機的一套完整指令集(稱為機器碼machine code),它可以被CPU直接執(zhí)行。機器碼中所有的指令用二進制編碼,每條二進制指令可以直接控制具體的硬件元器件。機器語言具有代碼直接執(zhí)行、控制硬件靈活和運行速度快的特點,但是不同種類計算機的機器碼是不相同的,一種機器語言編寫代碼只能在一種計算機型號上運行。
指令示例
1、0000 載入(LOAD)
2、0001 存儲(STORE)
寄存器示例
1、0000 寄存器A
2、0001 寄存器B
代碼示意
0000,0000,000000010000 代表 LOAD 1, 16
使用機器語言必須記憶全套的機器碼,不僅開發(fā)過程繁瑣、消耗時間長,代碼的可讀性也非常低。為了讓軟件工程師更高效的編寫程序,匯編語言(assembly language)被發(fā)明出來。這種語言的編寫方式和機器語言基本相同,只是用英文符號替換了機器的編碼。匯編語言的代碼不能被計算機直接執(zhí)行,需要通過匯編程序?qū)⑺鼈冝D(zhuǎn)換成可執(zhí)行的機器代碼。雖然機器代碼已經(jīng)被容易記憶的英文符號代替,但是程序的開發(fā)難度依然很高。程序開發(fā)時不但需要控制硬件計算器和寄存器等,還需要解決數(shù)據(jù)在硬件中存儲的地址轉(zhuǎn)換等問題。
由于機器語言和匯編語言中的指令直接映射為硬件操作,語言沒有進行更高級別的抽象,所以這類語言被稱之為低級語言(Low-level programming language)。計算機架構(gòu)中最常使用的是分層架構(gòu),例如OSI七層網(wǎng)絡(luò)模型、TCP/IP四層網(wǎng)絡(luò)模型,所以這里的低級指代的是較低的抽象層級。
與低級語言相對的是高級語言(Heigh-level programming language),現(xiàn)在常用的開發(fā)語言都是高級語言,例如:C/C++、JAVA、php、Python/ target=_blank class=infotextkey>Python、JavaScript、Golang等。高級語言可以跨不同的計算機硬件架構(gòu)和操作系統(tǒng)。高級語言的語法更接近自然語言的語法和結(jié)構(gòu),也與系統(tǒng)硬件的“距離”更遠。通過語言自身的開發(fā)庫兼容不同的操作系統(tǒng),通過操作系統(tǒng)兼容不同的硬件架構(gòu)。從這個分類來看,C語言雖然沒有現(xiàn)代語言的很多特性,例如:面向?qū)ο?、?nèi)存管理、函數(shù)編程等。但是,完全符合高級語言的特性,所以不是什么中級語言。
高級語言和低級語言只是翻譯上的簡化,并不是對開發(fā)語言好壞或者強弱的評判。每種開發(fā)語言都有特定的使用場景和推進計算機發(fā)展的獨有價值。