* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download PPT
Reactive programming wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Abstraction (computer science) wikipedia , lookup
Functional programming wikipedia , lookup
Assembly language wikipedia , lookup
Programming language wikipedia , lookup
Control flow wikipedia , lookup
Object-oriented programming wikipedia , lookup
Structured programming wikipedia , lookup
Name mangling wikipedia , lookup
Interpreter (computing) wikipedia , lookup
CS 403 Programming Language Theory Class 2 - August 29, 2000 Syllabus Texts: Sebesta: most of the content & theory Everybody has a copy? Meyers: specific applications to C++ CD Bookstore is getting the CD in… Homework Assignment List all the languages you have easy access to now. Engineering labs Bama Your home PC, if relevant Other computers… Be sure to note the different implementations of each language. Due today. Turn it in now. Outside write: Name, Section 1 or 2 Homework Assignment #2 (1) Consider this program: #include <stdio.h> main() { int i; printf(“Value of i: %d, %o, %x, %u, \n %c, %f, %ld\n", i,i,i,i,i,i,i); i = 42; printf(“Value of i: %d, %o, %x, %u, \n %c, %f, %ld\n", i,i,i,i,i,i,i); } Homework Assignment #2 (2) Compile and run (on 4 C compilers, including cc and gcc on UNIX)… Print your program and the executions, identified by compiler. Explain the output (about 1-2 pages) What does ‘printf’ do, and what do the ‘%’ commands do? Why the different but consistent output values for the same variable? What differences do you note across compilers? Turn in Tuesday, Sept 5th Reading Quiz Name one language in chapter 2 you hadn’t heard of before, and one characteristic of that language. After you’ve written your answer, draw a line & confer with your table-mates. Correct your answer if necessary. We won’t take this up today. (I’ve already got enough to grade!) Primary Influences on Language Design • Computer architecture • Programming methodologies Computer Architecture We use imperative languages, at least in part, because we use von Neumann machines. Other architectures influence other languages, i.e., LISP machines, … Programming Methodologies • 1950s and early 1960s: Simple applications; worry about machine efficiency • Late 1960s: People efficiency became important; readability, better control structures • Late 1970s: Data abstraction • Middle 1980s: Object-oriented programming Language Categories 1. 2. 3. 4. Imperative Functional Logic Object-oriented (closely related to imperative) Language Design Trade-Offs 1. Reliability versus cost of execution 2. Writability versus readability 3. Flexibility versus safety Implementation Methods 1. Compilation • • • Translate high-level program to machine code Slow translation Fast execution 2. Pure interpretation • • • No translation Slow execution Becoming rare 3. Hybrid implementation systems • • Small translation cost Medium execution speed Programming Environments The collection of tools used in software development 1. UNIX – An old operating system and tool collection 2. Borland C++ – A PC environment for C and C++ 3. Smalltalk –A language processor/ environment 4. Microsoft Visual C++ – A large, complex visual environment Chapter 2: Evolution of Programming Languages (1) Plankalkül - 1945 Pseudocodes - 1949 Laning and Zierler System - 1953 FORTRAN: I - 1957; II - 1958; IV - 1960-62; 77 - 1978; 90 - 1990 Language Evolution(2) LISP - 1959 ALGOL 58 - 1958; 60 - 1960 COBOL - 1960 BASIC - 1964 PL/I - 1965 Language Evolution (3): Early Dynamic Languages SIMULA 67 - 1967 ALGOL 68 - 1968 Pascal - 1971 C - 1972 Prolog - 1972 Ada - 1983 Smalltalk - 197280 C++ - 1985 Java - 1995 Plankalkül - 1945 Never implemented Advanced data structures floating point, arrays, records Invariants Notation: A(7) := 5 * B(6) | 5 * B => A V | 6 7 S | 1.n 1.n (subscripts) (data types) Pseudocodes - 1949 Before pseudocodes machine codes What’s wrong with machine code? Poor readability Poor modifiability Expressions are tedious Machine weaknesses: no indexing, floating point, ... Pseudocodes: Short Code ‘49 Expressions were coded, left to right Speedcoding ‘54 Two weeks of programming few hours! Automatically increment the instruction counter FORTRAN 0 - 1954 New IBM 704 Index registers Floating point in hardware Environment of development: 1. 2. 3. 4. Computers were small and unreliable Applications were scientific No programming methodology or tools Machine efficiency was most important FORTRAN 0 / I - 1957 Impact of environment on design: 1. No need for dynamic storage 2. Need good array handling and counting loops 3. No string handling, decimal arithmetic, or powerful input/output (commercial stuff) FORTRAN I - 1957 First implemented version of FORTRAN Names could have up to six characters Posttest counting loop (DO) Formatted I/O User-defined subprograms Three-way selection statement (arithmetic IF) No data typing statements FORTRAN I Features (cont.) No separate compilation Compiler released in April 1957, after 18 worker/years of effort. Programs larger than 400 lines rarely compiled correctly, mainly due to poor reliability of the 704 hardware. Code was very fast Quickly became widely used FORTRAN II - 1958 Independent compilation Fix the bugs FORTRAN IV - 1960-62 Explicit type declarations Logical selection statement Subprogram names could be parameters ANSI standard in 1966 FORTRAN 77 - 1978 Character string handling Logical loop control statement IF-THEN-ELSE statement FORTRAN 90 (“9X”) - 1990 Modules Dynamic arrays Pointers Recursion CASE statement Parameter type checking FORTRAN Evaluation: Dramatically changed forever the way computers are used! LISP - 1959 LISt Processing language (MIT, McCarthy) AI research needed a language that: 1. Process data in lists (vs. arrays) 2. Symbolic computation (vs. numeric) Only two data types: atoms and lists Syntax is based on lambda calculus LISP (2) Pioneered functional programming No need for variables or assignment Control via recursion and conditional expressions Still the dominant language for AI COMMON LISP and Scheme are contemporary dialects of LISP ML, Miranda, and Haskell are related languages ALGOL 58 - 1958 1. 2. 3. 4. Environment of development: FORTRAN had (barely) arrived for IBM 70X Many other languages were being developed, all for specific machines No portable language; all were machine-dependent No universal language for communicating algorithms ALGOL 58 (2) ACM and GAMM met for four days for design Goals of the language: 1. Close to mathematical notation 2. Good for describing algorithms 3. Must be translatable to machine code ALGOL 58 (3) Language Features: Concept of type was formalized Names could have any length Arrays could have any number of subscripts Parameters were separated by mode (in & out) Subscripts were placed in brackets Compound statements (begin ... end) Semicolon as a statement separator Assignment operator was := if had an else-if clause ALGOL 60 - 1960 Modified ALGOL 58 at 6-day meeting in Paris New Features: Block structure (local scope) Two parameter passing methods Subprogram recursion Stack-dynamic arrays Still no i/o and no string handling ALGOL 60 (2) Successes: It was the standard way to publish algorithms for over 20 years All subsequent imperative languages are based on it First machine-independent language First language whose syntax was formally defined (BNF) ALGOL 60 (3) 1. 2. 3. 4. 5. Never widely used, especially in U.S. Reasons: No I/O and the character set made programs nonportable Too flexible--hard to implement Entrenchment of FORTRAN Formal syntax description Lack of support of IBM