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