陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司 第一章 程式語言的演進 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司
大綱 程式語言的意義 程式語言的設計目標 程式語言的分類 各種語言的特性 高階語言的處理器 命令式語言與應用式語言 習題
程式語言的意義 由一組系統化的符號所成之集合,目的是表達某種機器解決特定問題的步驟 向計算機描述計算過程之工具
程式語言的設計目標 簡潔(simplicity)
程式語言的分類 第一代程式語言 第二代程式語言 第三代程式語言 第四代程式語言 第五代程式語言 機器語言 組合語言 高階語言 極高階語言 自然語言
第一代程式語言 機器語言(machine language) 指令與資料均由二進碼所組成 不需經由語言處理器直接在機器執行
第二代程式語言 組合語言(assembly language) 組合語言的指令稱為助憶碼 指令種類 機器指令(machine operation) 虛擬指令(pseudo operation) 必需經由組譯程式(assembler)處理 與機器語言合稱為低階語言
第三代程式語言 高階語言(high level language) 程序導向語言(procedure oriented language) 範例 Pascal C Basic Fortran Cobol
第四代程式語言 極高階語言 問題導向語言(problem oriented language) 範例 SQL (Structured Query Language)
第五代程式語言 自然語言 (nature language) 知識庫語言(knowledge based language) 語法接近人類日常生活的語言
各種語言的特性 Fortran Algol 60 Lisp Cobol APL Basic Snobol PL/1 Simula Prolog Pascal ADA C++ JAVA
FORTRAN FORmula TRANslator language 第一個高階語言 針對科學計算而設計 固定格式 首創輸出入格式化(I/O format) 提供正、零、負三種 IF 分枝結構 提供 Do 迴圈控制結構
執行下列Fortran之部份程式並求出 K 值 DO 400 I=1,5 IF(K) 100,200,300 100 K=K+5 GOTO 400 200 K=2*K+1 300 K=4*K-2 400 CONTINUE
Fortran 共用區(common area) 作用 處理方式
Algol 60 ALGOrithmic Language 發展於1960年代 無較大之贊助者 採自由格式(free format) 採區塊結構(block structure) 允許使用遞迴副程式(recursive subroutine) 使用傳名呼叫法(call by name)傳遞參數
Algol 60 動態界限陣列 採外顯式(explicit)宣告 首創以保留字(reserved word)來定義資料型態 首創結構化程式設計的概念 首創以B.N.F來描述語法 (Algol 58提出)
結構化程式設計 structured programming 把一個大的問題,依照邏輯上的特性,往下細分成幾個小的問題,再把這幾個小的問題,依照邏輯的特性,再往下細分成更小的問題,依此類推,直到很容易編寫程式的單元時為止
結構化程式設計 基本結構 循序結構 選擇結構 反覆結構
結構化程式設計 優點 可以分工 可讀性高 容易維護 易除錯 缺點 程式碼會變長 執行時間較長
PASCAL 紀念法國數學家Blaise Pascal 1975 年發展完成,由 IBM 贊助 採區塊結構 具嚴謹語法結構,適合教學用途
LISP 劍橋波蘭式(Cambridge polish notation) LISt Processing language 1950年代末期由麻省理工學院發展 S運算式(S expression) 利用垃圾收集法(garbage collection) 來管理記憶體 使用於人工智慧(Artificial Intelligence) 之應用,稱為人工智慧的低階語言 劍橋波蘭式(Cambridge polish notation)
Garbage collection 系統會主動的回收, 程式不再使用的記憶體空間 範例 Small talk JAVA LISP
SNOBOL StriNg Oriented symBOlic Language 貝爾實驗室於1960年代中期發展 具字樣配對(pattern matching) 能力 具字串處理能力(string manipulating) 型樣資料型態(pattern data type)
PL/1 Programming Language /1 IBM 於1960年代中期設計 綜合 Fortran,Cobol 與 Algol 60 之特性 首創 例外處理 (exception handling) 指標(pointer)資料型態 以維也納定義語言(Vienna Definition Language)來描述語意 採區塊結構 提供遞迴呼叫 (recursive call) 的功能 多重任務 (multi-tasking
Cobol COmmon Business Oriental Language 發展於 1960~1970 年代,由美國防部贊助 主要用於商業資料處理 具 IF-THEN-ELSE 敘述 語法傾向自然語言(natural language) 雜訊字(noise word) 首創與機器無關的資料描述方式 (data division)
COBOL 資料描述方式 IDENTIFICATION DIVISION ENVIRONMENT DIVISION DATA DIVISION PROCEDURE DIVISION
Algol W 使用數值結果呼叫法 (call by value result) 傳遞參數 首創 case敘述 提供記錄(record)與指標(pointer) 結構
Algol 68 參數的傳遞採用數值結果呼叫法 提供記錄與指標資料型態 首先提供使用者自行定義資料型態的功能
APL A Programming Language 擅長數學計算。 採不標準字元集。 允許陣列整體運算。 提供指標(pointer) 型態。 提供集合(set) 資料型態。〔首創〕 提供記錄(record) 資料型態。 提供 case 結構。 允許使用者自定資料型態。 採傳值呼叫法與傳址呼叫法傳遞參數
SIMULA 發展於1960年代後期 首創資料抽象化(data abstraction) 類別(class)
C 貝爾實驗室於1970年代發展 採區塊結構 可攜性高 適合發展系統程式 具 Self-compiled 特性 可呼叫組合語言
C++ Bjarne Stroustrup 設計,在貝爾實驗室中發展 主要目標 採用區塊結構 適合發展系統程式 高可攜性 實現物件導向程式設計理想 採用區塊結構 適合發展系統程式 高可攜性 高機器獨立性(machine independent) 區分大小寫 識別字由大小寫英文字母,數字或底線所構成,但第一個字元不得為數字
BASIC 1960年代中期發展 交談式(interactive)語言 適合程式發展初期使用 利用解譯器(interpreter)處理程式 Beginner's All-purpose Symbolic Instruction Code 1960年代中期發展 交談式(interactive)語言 適合程式發展初期使用 利用解譯器(interpreter)處理程式
Prolog PROgramming LOGic Alan Colmeraure 於1970年代初期發展 適用於人工智慧之應用 邏輯式程式語言 人工智慧的高階語言 1982年日本宣佈以 Prolog 為第五代電腦之發展語言
ADA 紀念 Augusta ADA Byron 美國防部發展 主要運用於國防需求 提供 資料抽象化 例外處理 平行處理
RPG Report Program Generator 由 IBM 發展 主要用作大量報表之產生
GPSS General Purpose Simulation System 主要用於模擬 (Simulation)
PILOT Programmed Inquiry Learning Or Teaching 主要應用於電腦輔教學 (Computer Aided Instruction) 可幫助教師編寫教材
FORTH 設計的目標是為了提供對電腦的記憶體及速度作最佳之運用
MODULA-2 由Wirth 發展出來,適用於系統軟體之開發
JAVA Sun Microsystems所發展 名稱之命名是源於突發的靈感 物件導向程式語言,以 class 為基本架構 垃圾收集法(garbage collection) Multithread 例外(exception)處理能力 取消 指標(pointer)資料型態 多重繼承(multiple inheritance) 運算子覆載(operator overloading)
JAVA Byte Code 可在不同的機器平台上移植,待要執行時,再由JAVA的直譯器(interpreter)處理此Byte Code即可 允許程式段能夠透過網路系統到另一個機器平台上執行 JAVA語言比 C語言具有更高的可攜性 目前在Windows NT, Windows 95, Macintosh, SUN, Linux等開發平台上已有的直譯程式可供使用。
高階語言的處理器 作用 種類 將利用高階語言寫成的程式段翻譯成機器可接受的碼。 編譯器(compiler) 直譯器(interpreter) 對原始程式碼中的每一條敘述,按照先後順序做一次之處理,並產生對應的目的碼 直譯器(interpreter) 對原始程式碼中的敘述,按照執行的先後順序做處理,並直接產生程式執行結果
編譯器及直譯器的比較 輸入 輸出 時間 空間 除錯特性 彈性 適合階段 範例
命令式語言 藉著改變變數之內容以做為控制程式執行的方法 範例 Fortran Cobol Basic Algol Pascal PL/1 C ….
應用式語言 語言藉著函數來表達。因此輸入將作為函數的參數而輸出則為函數的值 範例 Lisp APL Snobol
學習程式語言的目的 增進對程式語言的瞭解 可改進設計的程式之架構,藉以增進程式執行之效率 可選擇適用的語言 較易學習與設計新的語言
精選習題 程式語言常見的設計準則為何? 何謂外顯式型態法 (explicit typing)? 何謂內隱式型態法 (implicit typing)? 程式設計(design)與撰寫(coding)有何不同?