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