細述編程語言的發展過程

編寫計算機程序所用的語言是人與計算機之間交換的工具,按語言對機器的依賴程度分爲機器語言、彙編語言和高級語言。
機器語言(Machine Language)
機器語言是面向機器的語言,每一個由機器語言所編寫的程序只適用於某種特定類型的計算機,即指令代碼通常隨CPU型號的不同而不同。它可以被計算機硬件直接識別,不需要翻譯。一句機器語言實際上就是一條機器指令,它由操作碼和地址碼組成。機器指令的形式是用0、1組成的二進制代碼串。

彙編語言(Assemble Language)
彙編語言是一種面向機器的程序設計語言,它是爲特定的計算機或計算機系列設計的。彙編語言採用一定的助記符號表示機器語言中指令和數據,即用助記符號代替了二進制形式的機器指令。這種替代使得機器語言“符號化”,所以彙編語言也是符號語言。每條彙編語言的指令就對應了一條機器語言的代碼,不同型號的計算機系統一般有不同的彙編語言。

計算機硬件只能識別機器指令,執行機器指令,對於用助記符表示的彙編指令是不能執行的。彙編語言編寫的程序要執行的話,必須用一個程序將彙編語言翻譯成機器語言程序,用於翻譯的程序稱爲彙編程序(彙編系統)。

彙編程序是將用符號表示的彙編指令碼翻譯成爲與之對應的機器語言指令碼。用彙編語言編寫的程序稱爲源程序,變換後得到的機器語言程序稱爲目標程序。

高級語言
機器語言與彙編語言受機器限制費工費時,並且缺乏通用性,爲解決此問題,人們努力創造一種獨立於計算機的語言。從20世紀50年代中期開始到20世紀70年代陸續產生了許多高級算法語言。這些算法語言中的數據用十進制來表示,語句用較爲接近自然語言的英文字來表示。它們比較接近於人們習慣用的自然語言和數學表達式,因此稱爲高級語言。高級語言具有較大的通用性,尤其是有些標準版本的高級算法語言,在國際上都是通用的。用高級語言編寫的程序能使用在不同的計算機系統上。
但是,對於高級語言編寫的程序計算機是不能識別和執行的。要執行高級語言編寫的程序,首先要將高級語言編寫的程序翻譯成計算機能識別和執行的二進制機器指令,然後供計算機執行。

一般將用高級語言編寫的程序稱爲“源程序”,而把由源程序翻譯成的機器語言程序或彙編語言程序稱爲“目標程序”。把用來編寫源程序的高級語言或彙編語言稱爲源語言,而把和目標程序相對應的語言(彙編語言或機器語言)稱爲目標語言。

計算機將源程序翻譯成機器指令時,通常分兩種翻譯方式:一種爲“編譯”方式,另一種爲“解釋”方式。所謂編譯方式是把源程序翻譯成等價的目標程序,然後再執行此目標程序。而解釋方式是把源程序逐句翻譯,翻譯一句執行一句,邊翻譯邊執行。解釋程序不產生將被執行的目標程序,而是藉助於解釋程序直接執行源程序本身。一般將高級語言程序翻譯成彙編語言或機器語言的程序稱爲編譯程序。

一般來講高級語言和低級語言有一下特點
高級語言:實現效率高,執行效率低,對硬件的可控性弱,目標代碼大,可維護性好,可移植性好

低級語言:實現效率低,執行效率高,對硬件的可控性強,目標代碼小,可維護性差,可移植性差
我們都知道CPU運行的是二進制指令,所有的語言編寫的程序最終都要翻譯成二進制代碼,但是爲什麼實現會有以上衆多差異呢?下面以C語言爲高級語言代表,彙編語言爲低級語言代表來解釋一下。越低級的語言,形式上越接近機器指令,彙編語言就是與機器指令一一對應的。而越高級的語言,一條語句對應的指令數越多,其中原因就是高級語言對底層操作進行了抽象和封裝,使編寫程序的過程更符合人類的思維習慣,並且極大了簡化了人力勞動。也就是說你用高級語言寫一句,會被轉換成許多底層操作,大部分的工作交給了負責轉換的機器(即編譯器),從而人力得到了解放。因爲機器就是用來爲人類提供便利的,所以說高級語言的出現是計算機發展的必然結果。下面重點解釋爲何低級語言的執行效率更高:

低級語言可以通過控制硬件訪問來優化效率
越低級的語言月接近底層,即控制硬件訪問的能力越強,對硬件資源的利用效率越高。比如說彙編語言能夠訪問寄存器,而C語言就做不到。通過對寄存器等硬件的訪問,我們可以將程序的運行效率優化到最大,而像C這樣的高級語言用的最多的是堆棧這樣的內存結構,訪問速度自然不如寄存器了。

高級語言程序存在工作冗餘,有效率損失
各種語言需要通過編譯器翻譯成機器碼,不管編譯多麼智能和強大,都是會產生冗餘。這裏的冗餘不是指指令的多少,而是有沒有做沒有必要的事情。 產生冗餘的多少關鍵要看語言跟機器指令之間的耦合度。耦合度越大,編譯器翻譯過程越簡單,產生的冗餘越少。對應彙編來書,由於與機器碼一一對應,所以翻譯後基本沒有冗餘。而高級語言由於進行了抽象和封裝,所以與機器指令間的耦合度較低,因此整個翻譯過程較複雜,因此在高級語言在具體化的過程中不可避免會產生較多的冗餘。據說C語言有10%的效率損失。

效率高不高,還取決於程序員水平
一個差的程序員用匯編寫程序,可能存在很多沒有用的操作,而程序高手用c語言寫,可以將程序優化到最大。最終的結果可能是彙編的程序跑不過C語言程序。

總之,完成一項工作的工作量是不變的,機器做的 多了,人就做的就少了,同時人對程序的很多細節的控制性也減弱了。各種語言都是在這個平衡點附近糾結。從C/C++的注重機器運算效率的優化,到C#/JAVA注重開發效率的優化。人操作起來更加方便了,更高效了,代價就是,機器要處理的東西更多,運算效率被進一步壓縮。但是這個壓縮在許可範圍內,那麼這也是一種進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章