Transcript PPT
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