細述編程語言的發展過程

編寫計算機程序所用的語言是人與計算機之間交換的工具,按語言對機器的依賴程度分爲機器語言、彙編語言和高級語言。

機器語言(Machine Language)程序員

機器語言是面向機器的語言,每個由機器語言所編寫的程序只適用於某種特定類型的計算機,即指令代碼一般隨CPU型號的不一樣而不一樣。它能夠被計算機硬件直接識別,不須要翻譯。一句機器語言實際上就是一條機器指令,它由操做碼和地址碼組成。機器指令的形式是用0、1組成的二進制代碼串。算法

彙編語言(Assemble Language)編程

彙編語言是一種面向機器的程序設計語言,它是爲特定的計算機或計算機系列設計的。彙編語言採用必定的助記符號表示機器語言中指令和數據,即用助記符號代替了二進制形式的機器指令。這種替代使得機器語言「符號化」,因此彙編語言也是符號語言。每條彙編語言的指令就對應了一條機器語言的代碼,不一樣型號的計算機系統通常有不一樣的彙編語言。工具

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

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

高級語言設計

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

通常將用高級語言編寫的程序稱爲「源程序」,而把由源程序翻譯成的機器語言程序或彙編語言程序稱爲「目標程序」。把用來編寫源程序的高級語言或彙編語言稱爲源語言,而把和目標程序相對應的語言(彙編語言或機器語言)稱爲目標語言。資源

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

通常來說高級語言和低級語言有一下特色

高級語言:實現效率高,執行效率低,對硬件的可控性弱,目標代碼大,可維護性好,可移植性好

低級語言:實現效率低,執行效率高,對硬件的可控性強,目標代碼小,可維護性差,可移植性差

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

低級語言能夠經過控制硬件訪問來優化效率

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

高級語言程序存在工做冗餘,有效率損失

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

效率高不高,還取決於程序員水平

一個差的程序員用匯編寫程序,可能存在不少沒有用的操做,而程序高手用c語言寫,能夠將程序優化到最大。最終的結果多是彙編的程序跑不過C語言程序。

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

相關文章
相關標籤/搜索