计算机语言的发展史
語言的發展歷史
計算機語言的發展 總體分三個階段
第一代 機器語言 (相當于人類的原始階段) 第二代 匯編語言 (相當于人類的手工業階段) 第三代 高級語言 (相當于人類的工業階段)開篇:記住一個人 馮?諾依曼 ,此人為 計算機語言做出杰出的貢獻
數學家馮?諾依曼提出了重大的改進理論,主要有兩點:其一是電子計算機應該以二進制為運算基礎,其二是電子計算機應采用存儲程序方式工作,并且進一步明確指出了整個計算機的結構應由五個部分組成:運算器、控制器、存儲器、輸入裝置和輸出裝置。馮?諾依曼的這些理論的提出,解決了計算機的運算自動化的問題和速度配合問題,對后來計算機的發展起到了決定性的作用。直至今天,絕大部分的計算機還是采用馮?諾依曼方式工作。
第一代 機器語言 (machine language)
8086到Pentium的機器語言指令長度可以從1字節到13字節。
盡管機器語言好像是很復雜的,然而它是有規律的。
存在著多至100000種機器語言的指令。這意味著不能把這些種類全部列出來。
000000000000 代表地址為 0 的存儲器
000000000001 代表地址為 1 的存儲器
000000010000 代表地址為 16 的存儲器
集成
0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
命令
0000 代表 加載(LOAD)
0001 代表 存儲(STORE)
優點:直接執行,速度快,資源占用少
缺點:可讀性、可移植性差,編程繁雜
機器語言由數字組成所有指令。當讓你使用數字編程,寫幾百個數字、甚至幾千個數字,每天面對
的是純數字,我大膽預測:”程序員群體100%會 有精神問題”。
第二代 匯編語言(面向機器的程序設計語言)
這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的匯編語言。使用匯編語言能面向機器并較好地發揮機器的特性,得到質量較高的程序。
匯編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬件設備,如磁盤、存儲器、CPU、I/O端口等,且占用內存少,執行速度快,是高效的程序設計語言。
由于是直接控制硬件,且簡單的任務也需要很多匯編語言語句,因此在進行程序設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬件資源。這樣,就不可避免地加重了程序員的負擔。與此相同,在程序調試時,一旦程序的運行出了問題,就很難發現。
優點
1. 因為用匯編語言設計的程序最終被轉換成機器指令,故能夠保持機器語言的一致性,直接、簡捷,并能像機器指令一樣訪問、控制計算機的各種硬件設備,如磁盤、存儲器、CPU、I/O端口等。使用匯編語言,可以訪問所有能夠被訪問的軟、硬件資源。
2. 目標代碼簡短,占用內存少,執行速度快,是高效的程序設計語言,經常與高級語言配合使用,以改善程序的執行速度和效率,彌補高級語言在硬件控制方面的不足,應用十分廣泛。
缺點
1. 匯編語言是面向機器的,處于整個計算機語言層次結構的底層,故被視為一種低級語言,通常是為特定的計算機或系列計算機專門設計的。不同的處理器有不同的匯編語言語法和編譯器,編譯的程序無法在不同的處理器上執行,缺乏可移植性;
2. 難于從匯編語言代碼上理解程序設計意圖,可維護性差,即使是完成簡單的工作也需要大量的匯編語言代碼,很容易產生bug,難于調試;
3. 使用匯編語言必須對某種處理器非常了解,而且只能針對特定的體系結構和處理器進行優化,開發效率很低,周期長且單調。
這部分指令用于執行算術和邏輯運算,包括加法指令ADD/ADC、減法指令SUB/SBB、加一指令INC、減一指令DEC、比較操作指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV、符號擴展指令CBW/CWDE/CDQE、十進制調整指令DAA/DAS/AAA/AAS、邏輯運算指令NOT/AND/OR/XOR/TEST等。
匯編語言雖然能編寫高效率的程序,但是學習和使用都不是易事,并且很難調試。另一個復雜的問
題,匯編語言以及早期的計算機語言( Basic. Fortran等 )沒有考慮結構化設計原則,而是使用goto語句來作為程序流程控制的主要方法。這樣做的后果是:一大堆混亂的調轉語 句使得程序幾乎不可能
被讀懂。對于那個時代的程序員,能讀懂上個月自己寫的代碼都成為一種挑戰。
匯編語言仍然應用于工業電子編程領域、軟件的加密解密、計算機病毒分析等。
想了解更多的匯編語言,點擊.
第三代 高級語言(High-level programming language )
計算機語言具有高級語言和低級語言之分。而高級語言又主要是相對于匯編語言而言的,它是較接近自然語言和數學公式的編程,基本脫離了機器的硬件系統,用人們更易理解的方式編寫程序。編寫的程序稱之為源程序。
高級語言并不是特指的某一種具體的語言,而是包括很多編程語言,如流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易語言,中文版的C語言習語言等等,這些語言的語法、命令格式都不相同。
1. 命令式語言。這種語言的語義基礎是模擬“數據存儲/數據操作”的圖靈機可計算模型,十分符合現代計算機體系結構的自然實現方式。其中產生操作的主要途徑是依賴語句或命令產生的副作用。現代流行的大多數語言都是這一類型,比如 Fortran、Pascal、Cobol、C、C++、Basic、Ada、Java、C# 等,各種腳本語言也被看作是此種類型。
2. 函數式語言。這種語言的語義基礎是基于數學函數概念的值映射的λ算子可計算模型。這種語言非常適合于進行人工智能等工作的計算。典型的函數式語言如 Lisp、Haskell、ML、Scheme 、F#等。
3. 邏輯式語言。這種語言的語義基礎是基于一組已知規則的形式邏輯系統。這種語言主要用在專家系統的實現中。最著名的邏輯式語言是 Prolog。
4. 面向對象語言。現代語言中的大多數都提供面向對象的支持,但有些語言是直接建立在面向對象基本模型上的,語言的語法形式的語義就是基本對象操作。主要的純面向對象語言是 Smalltalk。
雖然各種語言屬于不同的類型,但它們各自都不同程度地對其他類型的運算模式有所支持。
1. 高級語言接近算法語言,易學、易掌握,一般工程技術人員只要幾周時間的培訓就可以勝任程序員的工作;
2. 高級語言為程序員提供了結構化程序設計的環境和工具,使得設計出來的程序可讀性好,可維護性強,可靠性高;
3. 高級語言遠離機器語言,與具體的計算機硬件關系不大,因而所寫出來的程序可移植性好,重用率高;
4. 由于把繁雜瑣碎的事務交給了編譯程序去做,所以自動化程度高,開發周期短,且程序員得到解脫,可以集中時間和精力去從事對于他們來說更為重要的創造性勞動,以提高程序的質量。
高級語言的出現,尤其是面向對象語言的出現,相當于人類的工業社會,高級語言極其易用,編程
門檻和難度大大降低,大量的人員進入軟件開發行業,為軟件爆發性的增長提供了充足的人力資源。
目前以及可預見的將來,計算機語言仍然處于“第三代高級語言”階段。
總結
- 上一篇: 区块链的确定性问题
- 下一篇: 嵌入式系统和计算机系统