Overview
Ideals
Aims, heroes, techniques
Languages and language designers
Early languages to C++
(There is so much more than
what we can cover)
Stroustrup/Programming 2
What is a programming language?
A tool for instructing machines
A notation for algorithms
A means for communication among programmers
A tool for experimentation
A means for controlling computer-controlled gadgets
A means for controlling computerized devices
A way of expressing relationships among concepts
A means for expressing high-level designs
All of the above!
And more
Stroustrup/Programming 3
Styles/paradigms
Procedural programming
Data abstraction
Object-oriented programming
Generic programming
Functional programming, logic programming, rule-
based programming, constraints-based programming,
aspect-oriented programming, …
Stroustrup/Programming 4
Styles/paradigms
template<class Iter> void draw_all(Iter b, Iter e)
{
for_each(b,e,mem_fun(&Shape::draw)); // draw all shapes in [b:e)
}
Point p(100,100);
Shape* a[] = { new Circle(p,50), new Rectangle(p, 250, 250) };
draw_all(a,a+2);
Which programming styles/paradigms did we use here?
Procedural, data abstractions, OOP, and GP
Stroustrup/Programming 5
Styles/paradigms
template<class Cont> void draw_all(Cont& c) // C++11
{
for_each(Shape* p : c) p->draw(); // draw all shapes in c
}
void draw_all(Container& c) // C++14
{
for_each(Shape* p : c) p->draw(); // draw all shapes in c
}
It’s all just programming!
Stroustrup/Programming 6
Some fundamentals
Portability is good
Type safety is good
High performance is good
Anything that eases debugging is good
Access to system resources is good
Stability over decades is good
Ease of learning is good
Small is good
Whatever helps analysis is good
Having lots of facilities is good
You can’t have all at the same time: engineering tradeoffs
Stroustrup/Programming 7
Programming languages
Machine code
Bits, octal, or at most decimal numbers
Assembler
Registers, load, store, integer add, floating point add, …
Each new machine had its own assembler
Higher level languages
First: Fortran and COBOL
Rate of language invention
At least 2000 a decade
Major languages today
Really solid statistics are hard to come by
IDS: about 9 million professional programmers
COBOL, Fortran, C, C++, Visual Basic, PERL, Java, Javascript
Ada, C#, PHP, …
Stroustrup/Programming 8
Early programming languages
1950s: 1960s: 1970s:
Simula
Lisp
Algol60 Algol68
Fortran Pascal
BCPL Classic C
COBOL
PL/I
Red==major commercial use
Yellow==will produce important “offspring”
Stroustrup/Programming 9
Modern programming languages
Lisp Python
Smalltalk PHP
Fortran77
Eiffel Java95 Java04
Simula67
C89 C++ C++98 C++11
Ada Ada98 C#
Pascal Object Pascal
COBOL04 Javascript
COBOL89
Visual Basic
Stroustrup/Programming
PERL 10
Why do we design and evolve languages?
There are many diverse applications areas
No one language can be the best for everything
Programmers have diverse backgrounds and skills
No one language can be best for everybody
Problems change
Over the years, computers are applied in new areas and to new problems
Computers change
Over the decades, hardware characteristics and tradeoffs change
Progress happens
Over the decades, we learn better ways to design and implement
languages
Stroustrup/Programming 11
First modern computer – first compiler
David Wheeler (1927-2004)
University of Cambridge
Exceptional problem solver: hardware, software, algorithms, libraries
First computer science Ph.D. (1951)
First paper on how to write correct, reusable, and maintainable code (1951)
(Thesis advisor for Bjarne Stroustrup )
Stroustrup/Programming 12
Early languages – 1952
One language for each machine
Special features for processor
Special features for “operating system”
Most had very assembler-like facilities
It was easy to understand which instructions would be generated
No portability of code
Stroustrup/Programming 13
Fortran
John Backus (1924-2007)
IBM
FORTRAN, the first high level computer language to be developed.
We did not know what we wanted and how to do it. It just sort of grew.
The Backus-Naur Form (BNF), a standard notation to describe the
syntax of a high level programming language.
A functional programming language called FP, which advocates a
mathematical approach to programming.
Stroustrup/Programming 14
Fortran – 1956
Allowed programmers to write linear algebra much as they
found it in textbooks
Arrays and loops
Standard mathematical functions
libraries
Users’ own functions
The notation was largely machine independent
Fortran code could often be moved from computer to computer with
only minor modification
This was a huge improvement
Arguably the largest single improvement in the history of
programming languages
Continuous evolution: II, IV, 77, 90, 95, 03, 08, [15]
Stroustrup/Programming 15
COBOL
“Rear Admiral Dr. Grace Murray Hopper (US
Navy) was a remarkable woman who grandly
rose to the challenges of programming the first
computers. During her lifetime as a leader in
the field of software development concepts, she
contributed to the transition from primitive
programming techniques to the use of
sophisticated compilers. She believed that
‘we've always done it that way’ was not
necessarily a good reason to continue to do so.”
(1906-1992)
Stroustrup/Programming 16
Cobol – 1960
Cobol was (and sometimes still is) for business programmers
what Fortran was (and sometimes still is) for scientific
programmers
The emphasis was on data manipulation
Copying
Storing and retrieving (record keeping)
Printing (reports)
Calculation/computation was seen as a minor matter
It was hoped/claimed that Cobol was so close to business
English that managers could program and programmers would
soon become redundant
Continuous evolution: 60, 61, 65, 68, 74, 85, 02
Stroustrup/Programming 17
Lisp
John McCarthy (1927-2011)
Stanford University
AI pioneer
Stroustrup/Programming 18
Lisp – 1960
List/symbolic processing
Initially (and often still) interpreted
Dozens (most likely hundreds) of dialects
“Lisp has an implied plural”
Common Lisp
Scheme
This family of languages has been (and is) the
mainstay of artificial intelligence (AI) research
though delivered products have often been in C or C++
Stroustrup/Programming 19
Algol
Peter Naur (b. 1928)
Danish Technical University and Regnecentralen
BNF
Edsger Dijkstra (1930-2002)
Mathematisch Centrum, Amsterdam, Eindhoven University of
Technology, Burroughs Corporation , University of Texas (Austin)
Mathematical logic in programming, algorithms
THE operating system
Stroustrup/Programming 20
Algol – 1960
The breakthrough of modern programming language concepts
Language description
BNF; separation of lexical, syntactic, and semantic concerns
Scope
Type
The notion of “general purpose programming language”
Before that languages were either scientific (e.g., Fortran), business (e.g.,
Cobol), string manipulation (e.g., Lisp), simulation, …
Never reached major non-academic use
Simula67
Algol58 Algol60 Algol68
Stroustrup/Programming Pascal 21
Simula 67
Kristen Nygaard (1926-2002) and Ole-Johan Dahl (1931-2002)
Norwegian Computing Center
Oslo University
The start of object-oriented programming and object-oriented design
Stroustrup/Programming 22
Simula 1967
Address all applications domains rather then a specific domain
As Fortran, COBOL, etc. did
Aims to become a true general-purpose programming language
Model real-world phenomena in code
represent ideas as classes and class objects
represent hierarchical relations as class hierarchies
Classes, inheritance, virtual functions, object-oriented design
A program becomes a set of interacting objects rather than a
monolith
Has major (positive) implications for error rates
Stroustrup/Programming 23
Dennis Ritchie (1941-2011) C
Bell Labs
C and helped with Unix
Ken Thompson (b. 1943)
Bell Labs
Unix
Doug McIlroy (b. 1932)
Bell Labs
Everybody’s favorite critic,
discussion partner, and
ideas man (influenced C,
C++, Unix, and much
more)
Stroustrup/Programming 24
C – 1978
(Relatively) high-level programming language for systems
programming
Very widely used, weakly checked, systems programming language
Associated with Unix and through that with Linux and the open source
movement
Direct map to hardware
Performance becomes somewhat portable
Designed and implemented by Dennis Ritchie 1974-78
Bjarne Stroustrup, BTL, 1985
Dennis Ritchie, BTL, 1974
Ken Thompson, BTL, 1972
C++ C++98 C++11
CPL BCPL B Classic C
C89 C99 C11
Martin Richards, Cambridge, 1967
Christopher Strachey, Cambridge, mid-
1960s Stroustrup/Programming 25
C++
Bjarne Stroustrup
AT&T Bell labs
Texas A&M University
making abstraction techniques affordable and manageable
for mainstream projects
pioneered the use of object-oriented and generic
programming techniques in application areas where
efficiency is a premium
Stroustrup/Programming 26
My ideals – in 1980 and more so in 2013
“To make life easier for the serious programmer”
i.e., primarily me and my friends/colleagues
I love writing code
I like reading code
I hate debugging
Elegant and efficient code
I really dislike choosing between the two
Elegance, efficiency, and correctness are closely related in
many application domains
Inelegance/verbosity is a major source of bugs and inefficiencies
Stroustrup/Programming 27
C++ – 1985
C++14
C++ is a general-purpose programming language
with a bias towards systems programming that
is a better C
supports data abstraction
supports object-oriented programming C++11
supports generic programming
C++98
1978-89
Classic C ARM C++
C with Classes C++
Simula 67 1979-84 1989
Stroustrup/Programming 28
More information
More language designer links/photos
http://www.angelfire.com/tx4/cus/people/
A few examples of languages:
http://dmoz.org/Computers/Programming/Languages/
Textbooks
Michael L. Scott, Programming Language Pragmatics, Morgan
Kaufmann, 2000, ISBN 1-55860-442-1
Robert W. Sebesta, Concepts of programming languages,
Addison-Wesley, 2003, ISBN 0-321-19362-8
History books
Jean Sammet, Programming Languages: History and
Fundamentals, Prentice-Hall, 1969, ISBN 0-13-729988-5
Richard L. Wexelblat, History of Programming Languages,
Academic Press, 1981, ISBN 0-12-745040-8
T. J. Bergin and R. G. Gibson, History of Programming
Languages – II, Addison-Wesley, 1996, ISBN 0-201-89502-1
Stroustrup/Programming 29