Chapter 1 Preliminaries ISBN 0-321-49362-1 系譜 Genealogy of Common Languages LISP Java BASIC Pascal FORTRAN Copyright © 2004 Pearson Addison-Wesley. All rights reserved. 1-2 為何研究PL? 1. 2. 3. 4. 5. 6. 增進 增進 增加 獲得 更易 更易 開發有效率的演算法 之能力 對既存PL之瞭解與使用 之能力 有用的程式結構之詞彙 更好的PL之選擇 學習新PL = grammar 設計新PL (static) Syntax L: (dynamic) Semantics = logic 一些重要影響 vs. 一些程式語言 影響 語言 1950-55:基本型電腦 組合語言和機器語言的程式 基本概念 副程式 資料結構 高階語言的可能發展 組合語言 實驗性的高階語言,但今天已 不被使用了 1956-60:小型、速度慢、昂貴的電腦 磁帶式的大量儲存系統 編譯程式 軟體意譯程式 碼最佳化 可動式的記憶管理 FORTRAN IV ALGOL 58 and ALGOL 60 COBOL LISP 1961-65:大型、昂貴的電腦 磁帶式的大量記憶系統 作業系統 多重程式 由語法決定的編譯程式 程式語言設計的一個目標:一般 目的 FORTRAN IV COBOL 61 Extended ALGOL 60 Revised SNOBOL APL(是一種概念,但並沒有實 行) 1966-70:可變大小、速度、費用,且具有 指令集合的攜帶型電腦 龐大及昂貴的記憶系統 分時,交互性的作業系統 微程式 最佳化的編譯程式 可以寫轉譯器的系統 第一代標準語言 語言設計目標: 可變及廣泛(一 般化) PL/I FORTRAN 66(標準) COLBOL 65(標準) ALGOL 68 SNOBOL 67 SIMULA 67 BASIC APL 360 1971-75:微電腦 小且不貴的大量記憶系統 程式正確性的證明 結構化的程式 軟體工程 反對大且複雜的語言 語言設計目標:簡單化 Pascal COLBOL 74(標準) PL/I 1976-80:有效力且不貴的電腦 龐大及便宜的記憶系統 分散式的電腦系統 嵌入式的電腦系統 用高階語言設計平行,即時程式 交談式的程式環境 資料抽象化 軟體的組成要素 正規的語意定義 語言設計目標:維護的可靠性和 容易性 Ada FORTRAN 77(標準) 影響PL設計之因素 計算機硬體與作業系統 2. 應用(領域) 3. 程式化方法 4. 開發方法 5. PL理論研究 6. 標準化 綜合上述,PL之歷史演進如表1-2. 1. 判定某一PL優於另一PL之因素: 1. 2. 3. 4. 5. 6. 7. 8. 語言概念之清晰、簡單與一致性 PL文法之簡要明瞭 應用上之自然 易於抽象化 易於證明正確性 程式化環境 可攜性 使用花費: (a)程式執行上 (b)程式翻譯上 (c)程式產生、測試上 (d)程式維護上 (1) Imperative( procedural) language: This model follows from the hardware of the conventional computer that executes instructions sequentially.( e.g., C, C++, FORTRAN, ALGOL, PL/I, Pascal, Ada, Smalltalk, and COBOL). Looks like :Stmt1; stmt2; … (2) Applicative( functional) language: looks like: funn(… fun2(fun1 (data)..). Program development proceeds by developing functions from previously developed functions to build more complex functions that manipulate the initial set of data until the final function can be used to compute an answer from the initial data. (e.g., LISP and ML). (3) Rule-based( logic programming) language: It executes by checking for the presence of a certain enabling condition and, when present , executing an appropriate action. Looks like: enabling condition1 action1 enabling condition2 action2 ...... Execution of a rule-based language is similar to an imperative language except that statements are not sequential. BNF parsing techniques and tools like YACC(Yet Another Compiler Compiler) to parse programs are rule-based techniques that use the formal syntax of the program as the enabling condition. (e.g., Prolog is the most well-known language in this class). (4) Object-oriented programming: In this class, complex data objects are built, then a limited set of functions are designed to operate on those data. Complex objects are designed as extensions of simpler objects, inheriting properties of the simpler object. As we show( in chapter 7), what is actually happening is that we are trying to use the best of two of the other computational models. By building concrete data objects, an object-oriented program gains the efficiency of imperative languages. By building classes of functions that use a restricted set of data objects, we build the flexibility and reliability of the applicative model. Programming Methodologies Influences • 1950s and early 1960s: Simple applications; worry about machine efficiency • Late 1960s: People efficiency became important; readability, better control structures – structured programming – top-down design and step-wise refinement • Late 1970s: Process-oriented to data-oriented – data abstraction • Middle 1980s: Object-oriented programming – Data abstraction + inheritance + polymorphism Copyright © 2009 Addison-Wesley. All rights reserved. 多態性 1-14 Language Categories(another view) • Imperative – Central features are variables, assignment statements, and iteration – Include languages that support object-oriented programming – Include scripting languages – Include the visual languages – Examples: C, Java, Perl, JavaScript, Visual BASIC .NET, C++ • Functional – Main means of making computations is by applying functions to given parameters – Examples: LISP, Scheme • Logic – Rule-based (rules are specified in no particular order) – Example: Prolog • Markup/programming hybrid ( i.e. object-oriented prog) – Markup languages extended to support some programming – Examples: JSTL, XSLT Ref. to next page Copyright © 2009 Addison-Wesley. All rights reserved. 1-15 A markup language is a modern system for annotating a text in a way that is syntactically distinguishable from that text. The idea and terminology evolved from the "marking up" of manuscripts, i.e. the revision instructions by editors, traditionally written with a blue pencil on authors' manuscripts. Examples are typesetting instructions such as those found in troff and LaTeX, and structural markers such as XML tags. Markup is typically omitted from the version of the text which is displayed for enduser consumption. Some markup languages, like HTML have presentation semantics, meaning their specification prescribes how the structured data is to be presented, but other markup languages, like XML, have no predefined semantics Read more: http://www.answers.com/topic/markuplanguage#ixzz1ErgYk1KO Copyright © 2009 Addison-Wesley. All rights reserved. 1-16 Language Design Trade-Offs • Reliability vs. cost of execution – Example: Java demands all references to array elements be checked for proper indexing, which leads to increased execution costs • Readability vs. writability Example: APL provides many powerful operators (and a large number of new symbols), allowing complex computations to be written in a compact program but at the cost of poor readability • Writability (flexibility) vs. reliability – Example: C++ pointers are powerful and very flexible but are unreliable Copyright © 2009 Addison-Wesley. All rights reserved. 1-17 Implementation Methods • Compilation – Programs are translated into machine language • Pure Interpretation – Programs are interpreted by another program known as an interpreter • Hybrid Implementation Systems – A compromise between compilers and pure interpreters Copyright © 2009 Addison-Wesley. All rights reserved. 1-18 Summary • The study of programming languages is valuable for a number of reasons: – Increase our capacity to use different constructs – Enable us to choose languages more intelligently – Makes learning new languages easier • Most important criteria for evaluating programming languages include: – Readability, writability, reliability, cost • Major influences on language design have been machine architecture and software development methodologies • The major methods of implementing programming languages are: compilation, pure interpretation, and hybrid implementation Copyright © 2009 Addison-Wesley. All rights reserved. 1-19