Punch cards
Jacquard
looms
Analytical
engine (Charles Babbage and Ada
Byron Lovelace)
US
Census data (Herman Hollerith)
Hand-coded machine language programs
10110000 01100001
Assembly language programs
movl $3, %eax
Modern programming languages
Charles
Babbage’s Analytic Engine 1834
Earliest known computer
Never fully built
Operations and variables on separate punch
cards
Conditional jumps accomplished mechanically
by physically jumping over a band of cards
Collaborator Lady Ada
Byron, Countess of Lovelace.
Babbage first computer scientist. Ada Byron first computer programmer.
Von
Neumann architecture 1945
Mathematician John von Neumann. Part of
design of ENIAC, one of first electronic computers.
Computer in his design consists of small CPU,
larger main memory, bus
Single CPU architecture still referred to as
von Neumann machines.
EDVAC report (Electronic Discrete Variable
Arithmetic Computer) describes the first stored program computer.
First Generation (late
1940s):
Machine-level programming languages
- Fast and efficient, executed directly on the CPU
- Consists only of 0s and 1s
- Difficult for humans to read, write, and debug
Second Generation (early 1950s):
- Symbolic assemblers
- Interpreting routines
- Very early compilers
Assembly languages
- Simple mnemonic instructions <opcode> <operands>
- Assembler translates into machine code
- Handcoding in
assembly only for low-level needs
Third Generation (mid 1950s - present):
High level, general-purpose
- FORTRAN,
LISP, COBOL, ALGOL
- (Ada,
Basic, C, C++, Java, Pascal, Smalltalk, …)
- Easier
for humans to read, write, debug
- Compiler translates
into machine code before running
- Interpreter translates
into machine code at runtime
Fourth Generation (1970s - ):
Specification languages, query languages, report generators,
systems engineering
- Maple, Mathematica, Postscript, SPSS, SQL
Fifth Generation (1980s - ):
Solve problems using constraints rather than algorithms, used
in Artificial Intelligence
- Prolog
Konrad Zuse’s Plankalkül 1945
- Language for expressing computations
- Not published until 1972
- Anticipated many developments of programming
languages
-Arrays, records
-Assertions
-Algorithms for sorting, numerical
computations, syntax analysis, and chess
Evolution of third-generation Languages
- Begins with FORTRAN in 1954
- Generation of high-level programming languages
- Languages stress expressivity and machine independence
- Programming is procedural
- Includes imperative, functional, compiler languages
FORTRAN (1954)
- Designed at IBM to efficiently translate mathematical
formulas into IBM 704 machine
code. Wanted code at least as efficient
as hand-coded.
- 1954 Report for a proposed Formula Translating
System
- 1957 FORTRAN language manual published
- Translator produced code that in some cases
was more efficient than the equivalent hand-coded program.
LISP
(1958)
●Interactive functional language
●Designed for IBM 704 by John
McCarthy
at Dartmouth 1956-1958
●Implemented at MIT. First reference
manual
published in 1960.
●Language based on lambda calculus.
(Mathematical notation for expressing functions.)
●LISP was designed for symbolic formula
manipulation. Stands for LISt Processor.
●Has become standard language of the AI
community
ALGOL (1958)
ALGOrithmic Language
●Language description published in ALGOL60
report
●First appearance of Backus-Naur
Form for programming language definition
●Widely used as a publication language for
algorithms
●US
Dept of Defense wanted
“common” PL for data processing
●CODASYL
committee (Conference on Data Systems Languages)
●Result
was COBOL in 1960 (COmmon Business-Oriented
Language)
●Grace
Hopper was involved in development and wrote 1st
compiler
●Designed
to be machine independent, unlike FORTRAN.
●Influenced
by Fortran, ALGOL58, and English.
APL ( early 1960s)
●A Programming
Language
●Based on notation developed by Ken Iverson at
Harvard 1957-1962.
●Functional, interactive, science-oriented
language that assumes the array as the default data structure.
●Suitable for applications with a heavy use of
numerical data in large multi-dimensional arrays.
●Used special symbols requiring special
keyboard / printer
BASIC (1964)
●Developed at Dartmouth in 1960’s by Tom
Kurtz, John Kemeny, and
a succession of undergraduates; first
ran in 1964.
●Beginner’s All-purpose
Symbolic Instructional
Code
●Intended to introduce students in
non-scientific disciplines to computing.
●Influenced by FORTRAN and ALGOL.
PL/1 (1964)
●Planned and designed by IBM as an extension
to FORTRAN
●“Extension” departed from FORTRAN specs and
was first released as NPL. Renamed PL/1 (Programming Language 1)
●Of interest in academic community because it
had every element of language design.
Too big and complicated.
●Compiler sold separately from machine
Pascal (1970)
●Designed by Niklaus Wirth
●(member of ALGOL committee; he
proposed
a revision known as ALGOL-W in 1965)
●Pascal first implemented in 1970.
●In opposition to trend of PL/1 – ALGOL68 – Ada
●Named after 17th century French philosopher
and mathematician Blaise Pascal.
●Simple and elegant
●Widely used in academic community
●Interesting features:
●Case statement
●Facility for user-defined data
types
●Record structure
C (1972)
●Designed by Kenneth Thompson
and Dennis Ritchie at Bell Labs in 1972.
●Designed for coding the routines of the UNIX
operating system.
●“High level” systems programming language
which created the notion of a portable operating system
●Concise syntax – programs somewhat hard to
read, understand, debug, maintain
●No built-in operations for handling composite
data types such as strings, sets, and lists.
●Not strongly typed. No run-time type checking. Easily leads to programming errors.
●Provides ability to code low-level operations
in a high-level language.
Programming Language Paradigms
Procedural: procedures, sequential execution of code are basic building blocks of program
-FORTRAN (FORmula TRANslating;
John Backus, IBM, 1950s)
-ALGOL (ALGOrithmic Language, 1958)
-COBOL (COmmon Business Oriented
Language, 1960)
-BASIC (Beginner's All-purpose
Symbolic Instruction
Code,
John Kemeny and
Thomas Kurtz, Dartmouth, 1963)
-Pascal (Niklaus
Wirth, 1970)
-C (Dennis Ritchie,
Bell Labs, 1972)
Object-Oriented: Program is designed around the objects required to solve the problem
-Smalltalk (Alan
Kay, Xerox PARC, 1971)
-Ada (US Dept of Defense, 1975)
-C++ (Bjarne Stroustrup,
Bell Labs, 1983)
-Java (James
Gosling, Sun Microsystems, 1995)
-C# (Microsoft,
2000)
Functional: Program is
designed around the evaluation of functions, rather than modifying state
-LISP (John
McCarthy, MIT, 1958)
-Common Lisp
-Dylan
-Logo
-Scheme
-ML (Robin
Milner et al, Edinburgh, 1970s)
-Haskell (purely
functional language, 1990)
Logic: Program is
declarative, based on mathematical logic
-Prolog (1972)
A program lists facts and rules, program execution is controlled deduction to
answer a query.
Scripting languages (used for text processing, shells, HTML, CGI)
-awk (Aho, Weinberger, Kerningham, Bell labs, 1978)
-Perl (Larry
Wall, NASA, 1987)
-Tcl/Tk (John Ousterhout, 1988)
-Python (Guido
van Rossum,
CWI, 1991)
-PHP (Rasmus Lerdorf,
1995)
-Ruby (Yukihiro
Matsumoto, 1996)
No comments:
Post a Comment