1.1 編程語言的發展史

一、什麼是編程?

看過《黑客帝國》這部電影的人們應該會對一個場景印象深刻,黑色的屏幕落下一行行的代碼,屏幕前的程序員十指飛舞乾脆利落,十分炫酷。

這個畫面讓很多人以爲這就是編程,坐在電腦前飛快的敲代碼,其實也沒錯,編程確實等價於敲代碼,但是可沒有電影中表現的那麼精彩。

編程其實就是程序員通過鍵盤輸入代碼與計算機做溝通,既然是溝通,那就必須是雙方的,程序員通過代碼向計算機發出指令,計算機執行指令之後將結果反饋到屏幕或文件上顯示給程序員。

計算機的反饋,可以是文字,可以是圖片,也可以是視頻,這是以我們能理解的方式顯示,所以編程也是必須以計算機能理解的方式發佈指令。

我們都知道,計算機底層所有的工作都是以二進制的形式進行的,也就是說它只認識0和1,當初最早的程序員也確實是靠二進制寫程序。

由二進制代碼0和1表達的指令稱爲機器指令,所有的機器指令的集合構成計算機的機器語言。

在這裏插入圖片描述
慢慢的,程序越來越多,邏輯也越來越複雜,特別容易出錯,代碼維護極其困難,單獨的0和1已經不能夠滿足需求了,爲了讓編程變得更加直觀,程序員就把二進制的01進行分組,四位二進制數表示一位十六進制數,程序員輸入十六進制的數,然後有一個專門的程序將十六進制數轉換爲二進制數之後再交給計算機執行。

在這裏插入圖片描述

但是,這種由十個數字和六個字母組成的語言還是不夠直觀,只有專業人員能看懂,普通人想要理解太過困難,這就導致編程的學習門檻高,最好是能夠讓計算機直接認識單詞,這樣的程序看起來也比較直觀。

程序員又把二進制的機器語言重新分組,讓固定長度的由01字符組成的機器碼直接對應英文單詞,這樣程序員就可以直接輸入單詞進行編程,於是彙編語言就此誕生。

我們來看一段彙編語言的代碼:

DATA    SEGMENT    
    STRING  DB   'Hello World!', '$'
DATA    ENDS    
        
STACK1  SEGMENT PARA    STACK    
    DW  20H DUP  (0)    
STACK1  ENDS    
CODE   SEGMENT    
ASSUME  CS:CODE, DS:DATA, SS:STACK1    
BEGIN:  MOV     AX, DATA    
    MOV DS, AX    
    LEA     DX, STRING    
    MOV     AH, 9    
    INT     21H    
    MOV     AH, 4CH    
    INT 21H    
CODE   ENDS    
 
    END BEGIN

這段代碼的功能其實就是向屏幕輸出“Hello World!”而已,這麼一個簡單的功能卻需要那麼繁瑣的編程,相當於我每次要向屏幕輸入字符的時候都要把上邊的代碼再敲一遍。

因此,又有程序員將固定功能的彙編語言代碼封裝起來,用一個簡潔的單詞代表,比如上述彙編語言的代碼是向屏幕輸入一個字符串,那麼我把這個功能用一個單詞print代表,這樣就只需要輸入print(“Hello World!”),就可以在屏幕上打印字符串,這就是高級語言。

高級語言簡化了編程的過程,具有如下優點:

1.不需要再使用繁瑣的二進制或十六進制的機器碼

2.更加平易近人,讓編程是以程序員的思路進行,而不是思考計算機底層應該怎麼做

編程語言經過層層優化,從最開始的機器語言,到彙編語言,再到高級語言,風格越來越優雅,現在通過高級語言編程只需要輸入美麗的英文語句就可以向計算機發布指令。

二、高級語言的分類

在屏幕上打印字符串,使用高級語言可以寫成:

print("Hello World!")

對我們而言,一看這行代碼就知道我們是給計算機發布了一個打印字符串的命令,而在計算機內部會把這條語句轉換成用機器語言編寫的等價指令,一大堆以01機器碼形式表現的指令,看起來非常麻煩。

但是對於計算機來說恰恰相反,高級語言編寫的指令就是一堆火星文,毫無用處,計算機本質上還是隻能識別二進制的機器碼,要想執行我們給它發佈的指令,就必須把指程序翻譯成機器語言。

我們知道,翻譯有兩種方式,假如我用中文寫了一本書,然後想讓一個只懂英語的外國人看,第一種方案是我找一個翻譯把整本書翻譯成英文版本,把譯本直接給外國人,他就可以直接閱讀,第二種方案是把翻譯人員和外國人都叫過來,我把內容讀給翻譯人員聽,翻譯人員理解了之後再翻譯成英文說給外國人聽。

這兩種方案其實就是編程語言的兩種分類,一種是將程序代碼全部翻譯成機器語言之後交給計算機執行,這叫編譯型語言,承接翻譯工作的是編譯器;另一種是將程序代碼一行一行的翻譯成機器語言然後計算機一行一行的執行,這叫解釋型語言,承接翻譯工作的是解釋器。

統一來講,編譯器或解釋器就是將我們能夠理解的高級語言程序轉換成計算機能夠理解的機器語言程序。

程序員負責進行思維活動編寫代碼,編譯器或解釋器負責代碼的翻譯工作。

編譯型

我們說編譯就類似於將一本書全部翻譯成機器語言程序,那麼編譯的過程肯定要消耗一定的時間,而計算機拿到“這本書”之後可以很快的閱讀,不僅如此,編譯之後的譯本還可以給很多能看懂的計算機執行,相比與此編譯所使用的時間就不足爲慮了。

編譯型語言的優點:

1.執行速度快。
	對於同一個任務採用不同的語言實現,一般編譯型語言的執行速度是解釋型語言執行速度的2~10倍。

2.調試方便。
	編譯型語言的代碼編寫要求比較嚴謹,在調試時比較方便。

3.源碼不依賴。
	編譯型語言執行時不需要源代碼。

編譯型語言的缺點:

1.代碼量大。
	完成同一個任務一般編譯型語言的代碼量是解釋型語言代碼量的10~50倍。

2.平臺依賴性。
	編譯型語言是要基於不同平臺底層實現的,因此對平臺的依賴性比較大。

3.更新代價大。
	每次修改完源代碼之後都要重新編譯。

常見的編譯型語言:C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Ada。

解釋型

解釋型語言的優點:

1.代碼簡潔。
	解釋型語言的代碼相對編譯型語言的代碼更爲簡潔,方便閱讀。

2.平臺獨立性和安全性。
	解釋器內部已經實現了對不同平臺的交互處理,這使得解釋型語言適合互聯網和WEB應用的開發。

解釋型語言的缺點:

1.執行速度慢。
	相比於編譯型語言,解釋型語言的執行速度較慢。

2.內存佔用大。
	必須先運行相關的解釋器才能執行解釋型語言,而解釋器會大量消耗資源,佔用CPU週期和內存。

常見的解釋型語言:Python、Tcl、Perl、Ruby、VBScript、 JavaScript。

發佈了685 篇原創文章 · 獲贊 157 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章