回覆列表
  • 1 # 大偉奇妙生活

    計算機程式設計語言的發展,經歷了從機器語言、組合語言到高階語言的歷程。

    1. 機器語言

    電子計算機所使用的是由“0”和“1”組成的二進位制數,二進位制是計算機的語言的基礎。計算機發明之初,人們只能降貴紆尊,用計算機的語言去命令計算機幹這幹那,一句話,就是寫出一串串由“0”和“1”組成的指令序列交由計算機執行,這種語言,就是機器語言。使用機器語言是十分痛苦的,特別是在程式有錯需要修改時,更是如此。而且,由於每臺計算機的指令系統往往各不相同,所以,在一臺計算機上執行的程式,要想在另一臺計算機上執行,必須另程式設計序,造成了重複工作。但由於使用的是針對特定型號計算機的語言,故而運算效率是所有語言中最高的。機器語言,是第一代計算機語言。

    2. 組合語言

    為了減輕使用機器語言程式設計的痛苦,人們進行了一種有益的改進:用一些簡潔的英文字母、符號串來替代一個特定的指令的二進位制串,比如,用“A D D”代表加法,“M O V”代表資料傳遞等等,這樣一來,人們很容易讀懂並理解程式在幹什麼,糾錯及維護都變得方便了,這種程式設計語言就稱為組合語言,即第二代計算機語言。然而計算機是不認識這些符號的,這就需要一個專門的程式,專門負責將這些符號翻譯成二進位制數的機器語言,這種翻譯程式被稱為彙編程式。

    組合語言同樣十分依賴於機器硬體,移植性不好,但效率仍十分高,針對計算機特定硬體而編制的組合語言程式,能準確發揮計算機硬體的功能和特長,程式精煉而質量高,所以至今仍是一種常用而強有力的軟體開發工具。

    3. 高階語言

    從最初與計算機交流的痛苦經歷中,人們意識到,應該設計一種這樣的語言,這種語言接近於數學語言或人的自然語言,同時又不依賴於計算機硬體,編出的程式能在所有機器上通用。經過努力,1 9 5 4年,第一個完全脫離機器硬體的高階語言—F O RT R A N問世了,4 0多年來,共有幾百種高階語言出現,有重要意義的有幾十種,影響較大、使用較普遍的有F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L / 1、P a s c a l、C、P R O L O G、A d a、C + +、V C、V B、D e l p h i、J AVA 等。

    高階語言的發展也經歷了從早期語言到結構化程式設計語言,從面向過程到非過程化程式語言的過程。相應地,軟體的開發也由最初的個體手工作坊式的封閉式生產,發展為產業化、流水線式的工業化生產。

    6 0年代中後期,軟體越來越多,規模越來越大,而軟體的生產基本上是人自為戰,缺乏科學規範的系統規劃與測試、評估標準,其惡果是大批耗費巨資建立起來的軟體系統,由於含有錯誤而無法使用,甚至帶來巨大損失,軟體給人的感覺是越來越不可靠,以致幾乎沒有不出錯的軟體。這一切,極大地震動了計算機界,史稱“軟體危機”。人們認識到:大型程式的編制不同於寫小程式,它應該是一項新的技術,應該像處理工程一樣處理軟體研製的全過程。程式的設計應易於保證正確性,也便於驗證正確性。1 9 6 9年,提出了結構化程式設計方法,1 9 7 0年,第一個結構化程式設計語言—P a s c a l語言出現,標誌著結構化程式設計時期的開始。

    8 0年代初開始,在軟體設計思想上,又產生了一次革命,其成果就是面向物件的程式設計。在此之前的高階語言,幾乎都是面向過程的,程式的執行是流水線似的,在一個模組被執行完成前,人們不能幹別的事,也無法動態地改變程式的執行方向。這和人們日常處理事物的方式是不一致的,對人而言是希望發生一件事就處理一件事,也就是說,不能面向過程,而應是面向具體的應用功能,也就是物件(o b j e c t)。其方法就是軟體的整合化,如同硬體的積體電路一樣,生產一些通用的、封裝緊密的功能模組,稱之為軟體整合塊,它與具體應用無關,但能相互組合,完成具體的應用功能,同時又能重複使用。對使用者來說,只關心它的介面(輸入量、輸出量)及能實現的功能,至於如何實現的,那是它內部的事,使用者完全不用關心,C + +、V B、D e l p h i就是典型代表。

    高階語言的下一個發展目標是面向應用,也就是說:只需要告訴程式你要幹什麼,程式就能自動生成演算法,自動進行處理,這就是非過程化的程式語言

  • 2 # Qi朱哥說

    機器語言到高階語言經過了組合語言和低階語言。

    順序是這樣的:機器語言、組合語言、低階語言、高階語言。

    計算機語言是人與計算機進行交流的工具,是用來書寫計算機程式的工具。可以通俗地理解為,你用用特定的語言與特定的物件溝通,關鍵是需要有個翻譯,這個翻譯就是編譯器或直譯器,同樣的語言,針對不同的物件需要有不同的編譯器或直譯器。所以說程式語言是“設計”出來的,設計只需要思考和寫文件,而該語言的編譯器或直譯器才是“開發”出來的。編譯原理講到了“自舉編譯器”。大意就是先用底層語言彙編寫一個能執行,但效率極低的C語言編譯器有了C語言的編譯器以後,就可以用C語言好好寫一個編譯器了,用之前那個執行沒問題,但效率低得編譯器編譯一下,就得到了可以使用的編譯器了。編譯器也是程式,所以也需要用程式語言來編寫,很多程式語言是用別的更基礎的語言開發的,其中用最多的就是C語言。C語言編譯器很多,大部分都是用別的C語言編譯器編譯出來的,而最早的C語言編譯器是用匯編語言寫出來的,最早的組合語言編譯器是透過“編譯器自舉”開發出來的。從最基本的角度看,一種程式語言就是把一組特定的詞彙,按照一組特定的語法規則組合到一起,形成計算機可以透過某種方式“理解”的東西,可以讓計算機據此執行特定的動作。

    首先要決定你想設計的語言應該解決什麼問題。面對不同的領域、不同的需求、不同的抽象層級、不同的思考正規化,也就產生了各有特長的程式語言。所謂“計算機執行動作”,其實只是“把一個二進位制數字傳入 CPU,然後等待什麼事情發生”的形而上描述。二進位制計算機所能理解的唯一東西就是二進位制數字,稱為“機器碼”。比如:10110 000 01100001這串數字,對於某顆 CPU 來說,就是“把 01100001 放到 000 號暫存器裡”的指令,其中“10110”的部分,就是 CPU 能懂得的“放入”指令。這樣的指還有許許多多,比如做加法、求邏輯“與”,跳轉,加密等等,全都只是一些二進位制數字而已。對人類來說,這種純數字的寫法太難記憶,就把它轉寫成:MOV AL, 97其中 MOV 代表“10110”,AL 代表 000 號暫存器,97 則是二進位制數 01100001 的十進位制表示。其他的數字指令也一併用這種簡記法來轉寫。使用這樣的一種轉寫方法來寫程式,就是組合語言(當然,這是一種極度簡化的說法)。組合語言談不上太多設計,其實幾乎就是在直接告訴 CPU 應該做什麼。把組合語言轉化為機器碼的程式,稱為“彙編器(Assembler)“。組合語言的優勢是很低階,你能直接控制 CPU 的行為;組合語言的缺點也是它太低階,你必須直接控制 CPU 的行為。看看“把 A 的值放進甲暫存器;B 的值放進乙暫存器;把乙暫存器的值放進 A;把甲暫存器的值放進 B。”這段彙編指令執行後是什麼結果?執行一下之後會看到,A 和 B 的值互換了。那麼,能不能直接寫“交換變數 A 和 B 的值”,然後由計算機來分解為一串機器碼的組合呢?所謂的“高階”程式語言就是這樣的原理。將高階程式語言翻譯成機器碼(或者其他更接近機器碼的形式)的過程,也就是計算機“理解”語言的過程,叫做“編譯”,而完成這一工作的程式,叫做“編譯器(compiler)”或者“直譯器(interpreter)”,兩者的區別是,編譯器一次性解析所有程式碼並轉換成機器碼(但通常不會執行),而直譯器則每解析一小部分就執行一小部分。接下來就要考慮兩個問題:高階語言要讓人寫起來方便;也要讓計算機易懂。因為人類是難搞的物種,所以前者通常是語言設計的重點。畢竟,只要懂些程式設計的基本知識,任何人都可以在三天時間裡設計出一門計算機語言,並且讓計算機讀懂它(也就是寫出編譯器),但要讓一種計算機語言寫起來舒服、讀起來易懂、管理起來方便,所需耗費的心力和時間則相去不可以道里計。探尋這一問題的種種思潮所引發的正規化轉換和生產力革命,是計算機歷史的永恆主題之一。計算機語言越來越高階,使用起來越來越簡單,實現卻越來越複雜;許多程式設計觀念比如面向物件(object orientation)、函式程式設計(functional programming)、事件驅動(event driven)之誕生、沉寂、重現、興盛和定型,都經由程式語言有所體現。當然這並不是說編譯部分就不重要。可靠、高效、靈活的編譯器是一切程式設計工作的基石。我們日常所用的編譯器都是如此千錘百煉的東西,以至於你很少會意識到它們本身也是複雜的軟體工程專案,也有可能出問題,也在不斷地發展著。十年前和現在的編譯器,從架構理念到實現都有不小的差別。

  • 3 # 碼友匯

    從0101>組合語言>c語言>xxxx,語言越來越人性化,易於學習,從面相過程到面相物件

  • 4 # 小馬過河Vizit

    經歷了不同層次的抽象。

    彙編面向的是機器硬體指令集。

    C面向的是記憶體和檔案系統。

    Java面向的是物件。

    python面向的是資料結構。

    不同的抽象層次,關注點不一樣。這和我們常說的分層開發道理一樣。

    我們在設計系統的時候也會繼續層層向高階抽象。

    抽象使得我們可以逐步利用低階的工具構建高階的工具,從而解決更高階的問題。

  • 5 # 我是菜菜菜叫獸

    編譯,編譯是一個十分重要的過程,是一個將機器邏輯匯聚成一個指令的能力,反過來講,也是將指令去解釋成一堆機器能力的過程。

  • 6 # 程式設計之禪

    總共經歷了三個階段:機器語言,組合語言,高階語言

    第一階段:機器語言

    早期,計算機的使用者必須用二進位制表示的指令編寫程式,一般用八進位制或十六進位制書寫,稱為機器語言程式。機器語言每一條指令,都必須包含以下四方面(1)操作碼。它具體說明了操作的性質及功能。(2)運算元的地址。CPU透過該地址就可以取得所需的運算元。(3)操作結果的儲存地址。把對運算元的處理所產生的結果儲存在該地址中,以便再次使用。(4)下條指令的地址。

    第二階段:組合語言

    以下程式用匯編語言實現列印:"hello world!"

    因為機器語言工作量大,且容易出錯,到20世紀50年代,出現了符號式程式設計語言,稱為組合語言,程式設計師可以用ADD,SUB,MUL和DIV等符號分別表示加法,減法,乘法,除法的操作碼,並用符號來表示指令和資料的地址。組合語言程式的大部分語句是和機器指令一一對應的。使用者用匯編語言編寫程式後,然後由計算機將它翻譯成機器語言,然後在計算機上執行。這個翻譯過程是透過系統程式設計師提供的彙編程式實現的。

    第三階段:高階語言

    1:面向過程的語言:以c語言為代表

    以下程式用c語言實現列印"hello world"

    由於組合語言依賴於特定的指令集,而各個處理器往往有不同的指令集,沒有跨平臺性,而且程式設計工作量大且易出錯,到20世紀50年代,以c語言為代表的面向過程語言誕生,逐漸成為了主流程式語言。c語言具有以下特點:簡潔,具有結構化的控制語句,豐富的資料型別,豐富的運算子,可對物理地址進行直接操作,程式碼具有較好的可移植性,可生成高質量、目的碼執行效率高的程式。我們熟悉的安卓,ios,其實都離不開c語言,到目前為止,c語言仍然是編寫作業系統,和需要超高速度執行程式的首選語言。和彙編類似,首先由計算機將c語言翻譯成組合語言,其次再翻譯為機器語言,最後由計算機執行。

    2:面向物件的語言:以c++,Java為代表

    以下程式用c++實現列印"hello world"

    隨著計算機技術的發展,軟體和系統也開始變得日益複雜,從最開始的一百行,幾千行程式碼,發展到現在的幾萬行,甚至是幾百萬行程式碼,c語言也慢慢顯現出它的缺點,在大型專案中複雜度極高,不安全,開發效率低等。到了80年代,出現了面向物件程式設計,在大型專案中優勢明顯,c++就是透過擴充套件c語言,實現的面向物件程式設計,Java則是純面嚮物件語言。

    3:動態語言:以python為代表

    以下程式用python實現列印"hello world"

    為了最大限度減少程式設計師的開發時間,出現了以python為代表的動態語言,動態語言只需要寫出必要的語句,而其它必要部分則交給直譯器,直譯器由開發人員提供,任何一臺電腦,只要安裝瞭解釋器就可以執行特定的動態語言。雖言python具有開發效率高,但因為需要依賴直譯器執行,因此其執行速度遠遠小於c,c++等語言,只適合開發對執行速度要求不高的程式

  • 7 # 日衝資訊 黃

    簡單地說,這是一個自動化的過程。

    最初的計算機只有計算的功能,類似於現在的CPU。中央處理器是一堆數位電路,在一個計時器的驅動下每隔一段時間,就到暫存器讀取資料,完成計算後再寫回相應的暫存器。根據這個原理人們設計了機器語言,最初的機器語言是由程式設計師按照位元組在卡片或是紙帶上打孔(有點象在答題紙上畫圈),在拿到專用裝置上,手工操作讀進暫存器,計算結果也是在紙帶上打孔,手工取出來。這是一項極其費時費力的工作,如果不是為了完成大量的計算任務,大概沒誰願意用計算機。

    後來,人們把紙帶改成了磁帶。先在紙上用匯編語言寫好程式,交給計算機操作員,計算機操作員在一臺類似於錄音機的輸入裝置上,把用鍵盤把彙編程式輸進去,這些程式被翻譯成機器碼直接寫在磁帶上。之後,操作員在把磁帶放到專用的讀取裝置上,讀進計算機進行運算。運算結果則可以輸出到簡易的列印裝置寫在紙上。這時候編寫程式的過程簡化了不少,但是對操作員的要求提高的,這些人成了整個過程的瓶頸。(順便說一句,這是馮諾依曼架構提出來之後了)

    為了進一步提高效率,人們把程式輸入裝置直接連到計算機本體上。這就要求輸入裝置的人機介面足夠簡單,而且可以完成操作員的所有工作。它需要提前檢測出機器碼中可能導致計算機癱瘓的錯誤,於是C語言這類高階語言就誕生了。所謂高階語言就是把讀寫暫存器的操作完全隱藏起來,用變數、運算符合流程控制編寫程式的語言。C語言程式經過編譯轉換成機器碼在被送入計算機。在這個時期,電腦由中央處理器和終端裝置組成。就像是固話那樣,中央處理器在郵電局,人們在家裡操作終端,按照中央處理器的佔用時間計費。(值得一提的是這時候還沒有作業系統。)

    時間來到了喬布斯的年輕時代,他和另一個小夥兒攢了一臺個人電腦,把中央處理器和終端整合在一個小盒子裡。這就需要設計出來一套流程,讓中央處理器和終端自動完成啟動連線一系列的操作,寫好程式後對程式進行編譯並執行。這就是最初的作業系統了。

    隨著作業系統的不斷完善,可執行的程式越來越複雜。人們開始在作業系統中內建了很多基本的程式模組,最初的想法是在編譯的時候把這些模組嵌入到程式中,C/C++現在也保留了這個做法。但如果這些模組要升級的話,就得把就的程式重新編譯連結一遍,這也是相當麻煩的事。於是,出現了很多種類的指令碼語言,他們無需編譯只需要呼叫預先做好的程式指令包就可以了。這也給這些程式語言帶來了可跨平臺(作業系統)執行的便利性。

    以上從程式設計自動化角度簡單地介紹了程式語言的發展歷程。還可以從語言學的角度進行分析,這個分析就比較晦澀難懂了,我也就不囉嗦了。

  • 中秋節和大豐收的關聯?
  • 孩子寫作業時總是粗心怎麼辦?