COMP 3190
Principles of
Programming
Language
Introduction & History
1
Administrivia
Instructors
Dr Guoping Qiu (1st Half)
[email protected] Dr C H Li (2nd Half)
[email protected]
2
Administrivia
TAs
xxxx
[email protected]
Course Web Page
http://www.comp.hkbu.edu.hk/~comp3190
3
Administrivia
Lecture/Tutorial/Lab
Wednesday: 13:30 - 14:20 LT2
Friday: 15:30 - 17:20 LT1
Lecture/Tutorial Location: LT1/LT2
Lab Location: To be announced
4
Administrivia
Assessment
Continuous Assessment (30%)
Assignments
Quiz
Final Examination (70%)
5
Administrivia
Textbook
Robert W. Sebesta, Concepts of
Programming Language, 8th Edition,
Pearson International, 2008
6
Administrivia
Textbook
Robert W. Sebesta, Concepts of
Programming Language, 8th Edition,
Pearson International, 2008
7
What this course is about
…
General concepts of language
design and evaluation …
8
What this course is NOT
about …
Any specific programming
language …
9
Programming
Languages
So many languages
Seems pretty chaotic
Some order ?
Why certain language
is designed the way it
is?
Which language should
I choose for my work?
10
Motivation
Increased ability to express ideas
Improved background for choosing appropriate
languages
Increased ability to learn new languages
Better understanding of significance of implementation
Better use of languages that are already known
Overall advancement of computing
11
Motivation
Increased ability to express ideas
Improved background for choosing appropriate
languages
Increased ability to learn new languages
Programmers can
increase
Better understanding of significance the range of
of implementation
their thought
Better use of languages that are already known
processes by
learning new
Overall advancement of computing
language constructs
12
Motivation
Increased ability to express ideas
Improved background for choosing appropriate
languages
Increased ability to learn new languages
Knowledge of languages
Better understanding of significanceand
of language constructs
implementation
will enable a programmer
to choose
Better use of languages that are already knowna language
that include features that
Overall advancement of computing best address the
characteristics of the
problem at hand
13
Motivation
Increased ability to express ideas
Improved background for choosing appropriate
languages
Increased ability to learn new languages
Better understanding of significance of implementation
Better use of languages that are already known
Computer
scientist’s destiny:
Overall advancement of computing learn a new
language 2 – 5 year
14
Motivation
Increased ability to express ideas
Understanding
implementation
Improved background for choosingissues
appropriate
will lead to
languages more intelligent use
of the language
Increased ability to learn new languages
Better understanding of significance of implementation
Better use of languages that are already known
Overall advancement of computing
15
Motivation
Increased ability to express ideas
What goes on in the
mind of the language
Improved background for choosing appropriate
designer when they
languages design a certain
features of C, Java,
Increased ability to learn new languages
C++ etc..
Better understanding of significance of implementation
Better use of languages that are already known
Overall advancement of computing
16
Programming Domains
Scientific applications
Large numbers of floating point computations; use of arrays
Fortran
Business applications
Produce reports, use decimal numbers and characters
COBOL
Artificial intelligence
Symbols rather than numbers manipulated; use of linked lists
LISP
Systems programming
Need efficiency because of continuous use
C
Web Software
Eclectic collection of languages: markup (e.g., XHTML), scripting
(e.g., PHP), general-purpose (e.g., Java)
17
Language Evaluation
Criteria
18
Language Evaluation
Criteria
Readability: the ease with which
programs can be read and understood
Writability: the ease with which a
language can be used to create programs
Reliability: conformance to
specifications (i.e., performs to its
specifications)
Cost: the ultimate total cost
19
Evaluation Criteria:
Readability
Overall simplicity
A manageable set of features and constructs
Minimal feature multiplicity
Minimal operator overloading
Orthogonality
A relatively small set of primitive constructs can be combined in a
relatively small number of ways
Every possible combination is legal
Control statements
The presence of well-known control structures
Data types and structures
Adequate predefined data types and structures
The presence of adequate facilities for defining data structures
Syntax considerations
Identifier forms: flexible composition
Special words and methods of forming compound statements
Form and meaning: self-descriptive constructs, meaningful keywords
20
Evaluation Criteria:
Writability
Simplicity and orthogonality
Few constructs, a small number of primitives, a
small set of rules for combining them
Support for abstraction
The ability to define and use complex structures
or operations in ways that allow details to be
ignored
Expressivity
A set of relatively convenient ways of specifying
operations
Strength and number of operators and predefined
functions
21
Evaluation Criteria:
Reliability
Type checking
Testing for type errors
Exception handling
Intercept run-time errors and take corrective
measures
Aliasing
Presence of two or more distinct referencing
methods for the same memory location
Readability and writability
A language that does not support “natural” ways of
expressing an algorithm will require the use of
“unnatural” approaches, and hence reduced
reliability
22
Evaluation Criteria: Cost
Training programmers to use the
language
Writing programs (closeness to
particular applications)
Compiling programs
Executing programs
Language implementation system:
availability of free compilers
Reliability: poor reliability leads to high
costs
Maintaining programs
23
Evaluation Criteria: Others
Portability
The ease with which programs can
be moved from one implementation
to another
Generality
The applicability to a wide range of
applications
Well-definedness
The completeness and precision of
the language’s official definition
24
Influences on Language
Design
Computer Architecture
Languages are developed around the
prevalent computer architecture, known
as the von Neumann architecture
Programming Methodologies
New software development
methodologies (e.g., object-oriented
software development) led to new
programming paradigms and by
extension, new programming languages
25
Computer Architecture
Influence
Well-known computer architecture: Von Neumann
Imperative languages, most dominant, because of
von Neumann computers
Data and programs stored in memory
Memory is separate from CPU
Instructions and data are piped from memory to CPU
Basis for imperative languages
Variables model memory cells
Assignment statements model piping
Iteration is efficient
http://en.wikipedia.org/wiki/Imperative_programming
26
The von Neumann
Architecture
27
The von Neumann
Architecture
Fetch-execute-cycle (on a von
Neumann architecture computer)
initialize the program counter
repeat forever
fetch the instruction pointed by the
counter
increment the counter
decode the instruction
execute the instruction
end repeat
28
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
29
Language Categories
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
Markup languages extended to support some programming
Examples: JSTL, XSLT
30
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
31
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
32
Layered View of Computer
The operating
system and
language
implementation are
layered over
machine interface
of a computer
33
Compilation
Translate high-level program (source language)
into machine code (machine language)
Slow translation, fast execution
Compilation process has several phases:
lexical analysis: converts characters in the source
program into lexical units
syntax analysis: transforms lexical units into parse
trees which represent the syntactic structure of
program
Semantics analysis: generate intermediate code
code generation: machine code is generated
34
The Compilation Process
35
Additional Compilation
Terminologies
Load module (executable
image): the user and system
code together
Linking and loading: the
process of collecting system
program units and linking them
to a user program
36
Von Neumann Bottleneck
Connection speed between a computer’s
memory and its processor determines the
speed of a computer
Program instructions often can be executed
much faster than the speed of the
connection; the connection speed thus
results in a bottleneck
Known as the von Neumann bottleneck; it is
the primary limiting factor in the speed of
computers
37
Pure Interpretation
No translation
Easier implementation of programs (run-
time errors can easily and immediately
be displayed)
Slower execution (10 to 100 times slower
than compiled programs)
Often requires more space
Now rare for traditional high-level
languages
Significant comeback with some Web
scripting languages (e.g., JavaScript, PHP)
38
Pure Interpretation
39
Hybrid Implementation
Systems
A compromise between compilers and pure
interpreters
A high-level language program is translated
to an intermediate language that allows
easy interpretation
Faster than pure interpretation
Examples
Perl programs are partially compiled to detect errors
before interpretation
Initial implementations of Java were hybrid; the
intermediate form, byte code, provides portability to
any machine that has a byte code interpreter and a run-
time system (together, these are called Java Virtual
Machine)
40
Hybrid Implementation
Systems
41
Just-in-Time Implementation
Systems
Initially translate programs to an
intermediate language
Then compile the intermediate language of
the subprograms into machine code when
they are called
Machine code version is kept for subsequent
calls
JIT systems are widely used for Java
programs
.NET languages are implemented with a JIT
system
42
Preprocessors
Preprocessor macros (instructions) are
commonly used to specify that code
from another file is to be included
A preprocessor processes a program
immediately before the program is
compiled to expand embedded
preprocessor macros
A well-known example: C preprocessor
expands #include, #define, and similar
macros
43
Programming Environments
The collection of tools used in software
development
UNIX
An older operating system and tool collection
Nowadays often used through a GUI (e.g., CDE,
KDE, or GNOME) that runs on top of UNIX
Borland JBuilder
An integrated development environment for Java
Microsoft Visual Studio.NET
A large, complex visual environment
Used to program in C#, Visual BASIC.NET, Jscript,
J#, and C++
44
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
45