1 / 53

第一章 程式語言的演進

第一章 程式語言的演進. 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司. 大綱. 程式語言的意義 程式語言的設計目標 程式語言的分類 各種語言的特性 高階語言的處理器 命令式語言與應用式語言 習題. 程式語言的意義. 由一組系統化的符號所成之集合,目的是表達某種機器解決特定問題的步驟 向計算機描述計算過程之工具. 程式語言的設計目標. 簡潔 (simplicity) 學習程式語言增進對程式語言的了解、改進程式設計的架構、增進執行效率、選擇適用的語言與設計新的語言. 程式語言的分類. 第一代程式語言 機器語言

Download Presentation

第一章 程式語言的演進

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第一章 程式語言的演進 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司

  2. 大綱 • 程式語言的意義 • 程式語言的設計目標 • 程式語言的分類 • 各種語言的特性 • 高階語言的處理器 • 命令式語言與應用式語言 • 習題

  3. 程式語言的意義 • 由一組系統化的符號所成之集合,目的是表達某種機器解決特定問題的步驟 • 向計算機描述計算過程之工具

  4. 程式語言的設計目標 • 簡潔(simplicity) • 學習程式語言增進對程式語言的了解、改進程式設計的架構、增進執行效率、選擇適用的語言與設計新的語言

  5. 程式語言的分類 • 第一代程式語言 • 機器語言 • 第二代程式語言 • 組合語言 • 第三代程式語言 • 高階語言 • 第四代程式語言 • 極高階語言 • 第五代程式語言 • 自然語言

  6. 第一代程式語言 • 機器語言(machine language) • 指令與資料均由二進碼所組成 • 不需經由語言處理器直接在機器執行

  7. 第二代程式語言 • 組合語言(assembly language) • 組合語言的指令稱為助憶碼(mnemonic code) • 指令種類 • 機器指令(machine operation) • 虛擬指令(pseudo operation) • 必需經由組譯程式(assembler)處理 • 與機器語言合稱為低階語言

  8. 第三代程式語言 • 高階語言(high level language) • 程序導向語言(procedure oriented language) • 需要經過編譯或直譯程式 • 範例 • Pascal • C • Basic • Fortran • Cobol

  9. 第四代程式語言 • 極高階語言 • 問題導向語言(problem oriented language) • 範例 • SQL (Structured Query Language)

  10. 第五代程式語言 • 自然語言 (nature language) • 知識庫語言(knowledge based language) • 語法接近人類日常生活的語言

  11. Fortran Algol 60 Lisp Cobol APL Basic Snobol PL/1 Simula Algol 68 C Prolog Pascal ADA C++ JAVA 各種語言的特性

  12. FORTRAN • FORmula TRANslator language • 第一個高階語言 • 針對科學計算而設計 • 固定格式 • 首創輸出入格式化(I/O format) • 提供正、零、負三種 IF 分枝結構 • 提供 Do 迴圈控制結構:早期是後測迴圈 • 隱含性變數:不經宣告內定為整數型態

  13. 執行下列Fortran之部份程式並求出 K 值 K=-1 DO 400 I=1,5 IF(K) 100,200,300 正、零、負 100 K=K+5 GOTO 400 200 K=2*K+1 GOTO 400 300 K=4*K-2 400 CONTINUE

  14. Fortran • 共用區(common area) • 作用 • 處理方式

  15. Algol 60 • ALGOrithmic Language • 發展於1960年代 • 無較大之贊助者 • 採自由格式(free format) • 首創採區塊結構(block structure) • 允許使用遞迴副程式(recursive subroutine) • 首創使用傳名呼叫法(call by name)傳遞參數

  16. Algol 60 • 動態界限陣列 • 採外顯式(explicit)宣告 • 一個敘述中列出變數的名稱,並宣告他們所屬的型態,稱為外顯式宣告 • 首創以保留字(reserved word)來定義資料型態 • 首創結構化程式設計的概念 • 首創以B.N.F來描述語法 (Algol 58提出)

  17. 結構化程式設計 • structured programming • 把一個大的問題,依照邏輯上的特性,往下細分成幾個小的問題,再把這幾個小的問題,依照邏輯的特性,再往下細分成更小的問題,依此類推,直到很容易編寫程式的單元時為止

  18. 結構化程式設計 • 基本結構 • 循序結構 • 選擇結構 • 反覆結構 • 避免使用GOTO,破壞程式的可讀性及結構性

  19. 結構化程式設計 • 優點 • 可以分工 • 可讀性高 • 容易維護 • 易除錯 • 缺點 • 程式碼會變長 • 執行時間較長

  20. PASCAL • 紀念法國數學家Blaise Pascal • 1975 年發展完成,由 IBM 贊助 • 提供指標、集合資料型態、紀錄資料型態 • 允許自訂資料型態 • 傳值和傳址呼叫 • 採區塊結構 • 具嚴謹語法結構,適合教學用途

  21. LISP • LISt Processing language • 1950年代末期由麻省理工學院發展 • S運算式(S expression) • 原子 ( atom ) :包含符號 ( symbol ) 及數值 ( number ) 。 • 串列 ( list ) :則是以小括號括起來的一串資料。 • 利用垃圾收集法(garbage collection) 來管理記憶體 • 使用於人工智慧(Artificial Intelligence) 之應用,稱為人工智慧的低階語言 • 劍橋波蘭式(Cambridge polish notation) • 所謂「S-表達式」或「sexp」(其中「S」代表「符號的」),是指一種以人類可讀的文本形式表達半結構化數據的約定

  22. Garbage collection • 系統會主動的回收, 程式不再使用的記憶體空間 • 範例 • Small talk • JAVA • LISP

  23. SNOBOL • StriNg Oriented symBOlic Language • 貝爾實驗室於1960年代中期發展 • 具字樣配對(pattern matching) 能力 • 具字串處理能力(string manipulating) • 型樣資料型態(pattern data type)

  24. PL/1 • Programming Language /1 • IBM 於1960年代中期設計 • 綜合 Fortran,Cobol 與 Algol 60 之特性 • 首創 • 例外處理 (exception handling) • 指標(pointer)資料型態 • 以維也納定義語言(Vienna Definition Language)來描述語意 • 採區塊結構 • 提供遞迴呼叫 (recursive call) 的功能 • 多重任務 (multi-tasking

  25. Cobol • COmmon Business Oriental Language • 發展於 1960~1970 年代,由美國防部贊助 • 主要用於商業資料處理,能處理大量資料輸出入 • 缺乏複雜的數學計算能力 • 具 IF-THEN-ELSE 敘述 • 語法傾向自然語言(natural language) • 雜訊字(noise word)增加可讀性 go to只處理go不處理to • 首創與機器無關的資料描述方式 (data division)

  26. COBOL • 資料描述方式 • IDENTIFICATION DIVISION • ENVIRONMENT DIVISION • DATA DIVISION • PROCEDURE DIVISION

  27. Algol W • 使用數值結果呼叫法 (call by value result) 傳遞參數 • 首創 • case敘述 • 提供記錄(record)與指標(pointer) 結構

  28. Algol 68 • 參數的傳遞採用數值結果呼叫法 • 提供記錄與指標資料型態 • 首先提供使用者自行定義資料型態的功能

  29. APL • A Programming Language • 擅長數學計算。 • 採不標準字元集。 • 允許陣列整體運算。 • 提供指標(pointer) 型態。 • 提供集合(set) 資料型態。〔首創〕 • 提供記錄(record) 資料型態。 • 提供 case 結構。 • 允許使用者自定資料型態。 • 採傳值呼叫法與傳址呼叫法傳遞參數

  30. SIMULA • 發展於1960年代後期 • 首創資料抽象化(data abstraction) • 類別(class)

  31. C • 貝爾實驗室於1970年代發展 • 採區塊結構 • 可攜性高 • 適合發展系統程式 • 具 Self-compiled 特性 • 編譯程式大部分以C寫成 • 可呼叫組合語言

  32. C++ • Bjarne Stroustrup 設計,在貝爾實驗室中發展 • 主要目標 • 實現物件導向程式設計理想 • 採用區塊結構 • 適合發展系統程式 • 高可攜性 • 高機器獨立性(machine independent) • 區分大小寫 • 識別字由大小寫英文字母,數字或底線所構成,但第一個字元不得為數字

  33. BASIC • Beginner's All-purpose Symbolic Instruction Code • 1960年代中期發展 • 交談式(interactive)語言 • 適合程式發展初期使用 • 利用解譯器(interpreter)處理程式

  34. Prolog • PROgramming LOGic • Alan Colmeraure 於1970年代初期發展 • 適用於人工智慧之應用 • 邏輯式程式語言 • 人工智慧的高階語言 • 1982年日本宣佈以 Prolog 為第五代電腦之發展語言

  35. ADA • 紀念 Augusta ADA Byron • 美國防部發展 • 主要運用於國防需求 • 提供 • 資料抽象化 • 例外處理 • 平行處理

  36. RPG • Report Program Generator • 由 IBM 發展 • 主要用作大量報表之產生

  37. GPSS • General Purpose Simulation System • 主要用於模擬 (Simulation)

  38. PILOT • Programmed Inquiry Learning Or Teaching • 主要應用於電腦輔教學 (Computer Aided Instruction) • 可幫助教師編寫教材

  39. FORTH • 設計的目標是為了提供對電腦的記憶體及速度作最佳之運用

  40. MODULA-2 • 由Wirth 發展出來,適用於系統軟體之開發

  41. JAVA • Sun Microsystems所發展 • 名稱之命名是源於突發的靈感 • 物件導向程式語言,以 class 為基本架構 • 垃圾收集法(garbage collection) • Multithread • 例外(exception)處理能力 • 取消 • 指標(pointer)資料型態 • 多重繼承(multiple inheritance) • 運算子覆載(operator overloading)

  42. JAVA • Byte Code • 可在不同的機器平台上移植,待要執行時,再由JAVA的直譯器(interpreter)處理此Byte Code即可 • 允許程式段能夠透過網路系統到另一個機器平台上執行 • JAVA語言比 C語言具有更高的可攜性 • 目前在Windows NT, Windows 95, Macintosh, SUN, Linux等開發平台上已有的直譯程式可供使用。

  43. 高階語言的處理器 • 作用 • 將利用高階語言寫成的程式段翻譯成機器可接受的碼。 • 種類 • 編譯器(compiler) • 對原始程式碼中的每一條敘述,按照先後順序做一次之處理,並產生對應的目的碼 • 直譯器(interpreter) • 對原始程式碼中的敘述,按照執行的先後順序做處理,並直接產生程式執行結果

  44. 編譯器及直譯器的比較 • 輸入 都用高階語言 • 輸出 直:執行結果 編:目的碼 • 時間 直:長 編:短 • 空間 直:少 編:多 • 除錯特性 都佳 • 彈性 直:較差 編:較佳 • 適合階段 直:開發初期 編:開發後期 • 範例 直:Basic Lisp Prolog APL 編: Pascal C C++ Cobol Fortran Ada

  45. 命令式語言 imperative • 藉著改變變數之內容以做為控制程式執行的方法 • 範例 • Fortran • Cobol • Basic • Algol • Pascal • PL/1 • C • C++ • ….

  46. 應用式語言 applicative • 語言藉著函數來表達。因此輸入將作為函數的參數而輸出則為函數的值 • 範例 • Lisp • APL • Snobol

  47. 1. 分別寫出最先引進下列各項概念的程式語言:1. 分別寫出最先引進下列各項概念的程式語言: • (a) 區段結構(block structure)。 • (b) 輸出入格式(input/output format)。 • (c) 雜訊字(noise words)。 • (d) 程式定義的特殊條件(program defined exception condition)。 • (e) 抽象資料型態(abstract data type)。 • (a) Algol 60。 • (b) Fortran。 • (c) Cobol。 • (d) PL/1。 • (e) SIMULA。

  48. 下列十四種重要程式語言,均為有重要特色的:ADA, Algol 60, Algol 68, APL, Basic, C, Cobol, Lisp, Fortran, Modula 2, Pascal, PL/1, Prolog, Snobol試據以回答下列各下題: • (1) 最早發展出來而廣泛應用的程式語言為。 • (2) 美國國防部採用來作為融入式(embedded)系統之標準程式語言為。 • (3) 最早為人工智慧所設計的程式語言為。 • (4) 對於程式語言所設計觀念上影響最大的早期程式語言是。 • (5) 由IBM公司推出之泛用程式語言是。 • (6) 為字串處理而設計的程式語言是。 • (1) Fortran (強調科學計算) • (2) Ada • (3) Lisp • (4) Algol 60 (Block structure的觀念) • (5) PL/1 • (6) Snobol

  49. 何謂外顯式型態法 (explicit typing)?何謂內隱式型態法 (implicit typing)? • 外顯式型態法是指符號在使用前必須先定義,內隱式型態法則是指符號在使用前不必先定義。

  50. 程式語言常見的設計準則為何? • (1) 語法(syntax)及語意(semantics)定義必須明確。 • (2) 高可靠性。 • (3) 快速翻譯 • (4) 具機器獨立性。 • (5) 最佳化的目的碼,藉以加快執行速度。

More Related