經(jīng)過半個多世紀(jì)的發(fā)展,產(chǎn)生了幾百種程序設(shè)計語言,各種語言都具有自己的特色,有些已經(jīng)消亡,留下來的則不斷被改進(jìn),并應(yīng)用在不同的領(lǐng)域中.有些語言是通用的,有些語言則是針對專門領(lǐng)域設(shè)計的,稱為領(lǐng)域?qū)S谜Z言(Domain Specific Language,DSL),其基本設(shè)計思想是求專不求全。
程序設(shè)計語言有時也稱為編程語言。
根據(jù)其抽象層次,可將程序設(shè)計語言分為低級語言和高級語言,低級語言包括機(jī)器語言和匯編語言,高級語言則豐富得多。
1.機(jī)器語言和匯編語官
機(jī)器語言是用二進(jìn)制代碼表示的、計算機(jī)能直接識別和執(zhí)行的機(jī)器指令的集合。它是計算機(jī)的設(shè)計者通過硬件結(jié)構(gòu)賦予計算機(jī)的操作功能,因此,機(jī)器語言與具體硬件結(jié)構(gòu)密切相關(guān).例如,將兩個整數(shù)相乘并打印運算結(jié)果的某機(jī)器語言程序如表7-1所示。

用機(jī)器語言編寫程序,編程人員首先要熟記所用計算機(jī)的全部指令代碼和代碼的含義。同時,程序員豁要自己處理每條指令和每個數(shù)據(jù)的存儲分配和輸人輸出,還要記住編程過程中每一步所使用的工作單元處在何種狀態(tài)。
在那個年代(1950年前后),編程是一種什么樣的工作呢?
那時編寫程序不是今天這樣的“寫”程序,程序也不是寫在紙上的,而是在紙帶上打出不規(guī)則的小孔(修改程序就是給紙帶打補丁)。程序員需要先把給計算機(jī)的指令換算成二進(jìn)制數(shù)字,然后把二進(jìn)制數(shù)字轉(zhuǎn)成這些小孔,每一個小孔代表了給計算機(jī)的一個信號,上百個小孔驅(qū)使計算機(jī)做一個動作,成千個小孔才形成一條指令!
顯然,用機(jī)器指令編寫的程序難以閱讀和理解,而且如果程序出了錯,檢查和排除錯誤也非常困難。為了克服用機(jī)器語言編程難讀、難編、難記和易出錯的缺點,人們就用與代碼指令實際含義相近的英文縮寫詞、字母和數(shù)字等符號來取代指令代碼,于是就產(chǎn)生了匯編語言。
在匯編語言中,常用ADD表示相加、SUB表示相減、MUL表示相乘等。例如,用某匯編語言實現(xiàn)兩個整數(shù)相乘并打印輸出的程序如表7-2所示。


2.商級語官
不論是機(jī)器語言還是匯編語言都是面向硬件的,語言對機(jī)器過分依賴,都不利于程序的編寫和移植。因此,人們開發(fā)了多種高級程序設(shè)計語言(簡稱高級語言)。在高級語言中,人們使用更接近于自然語言的符號進(jìn)行表達(dá),例如,用print表示打印輸出、用“+”表示相加運算等.例如,用C語言編寫的實現(xiàn)兩個整數(shù)相乘并輸出的程序如表7-3所示。

3.編譯與解釋
用某種高級語言或匯編語言編寫的程序稱為源程序,源程序不能直接在計算機(jī)上執(zhí)行。
如果源程序是用匯編語言編寫的,則需要用匯編程序?qū)⑵浞g成目標(biāo)程序,再與必要的其他目標(biāo)程序鏈接后才能執(zhí)行。如果源程序是用某種高級語言編寫的,則需要對應(yīng)的編譯程序(也稱為編譯器)將其翻譯成目標(biāo)程序并進(jìn)行鏈接,然后才能執(zhí)行,如圖7-1所示。
