Title: Introduction to Programming Languages
1Introduction to Programming Languages
- Nai-Wei Lin
- Department of Computer Science and Information
Engineering - National Chung Cheng University
2Chapter 1Introduction
3Outline
- What is a programming language
- Levels of programming languages
- Definition of programming languages
- Implementation of programming languages
- Abstractions in programming languages
- Paradigms of programming languages
- Language design principles
4What Is a Programming Language
- A natural language is designed to communicate
between human - A programming language is designed to communicate
between human and computers
5How we communicate influences how we think, and
vice versa.
6A programming language is a notation for
describing computation in computer-readable and
human-readable form
7Computation
- Computation is usually defined formally using the
mathematical concept of a Turing machine - Churchs thesis states that it is not possible to
build a machine that is inherently more powerful
than a Turing machine
8Turing Completeness
- A programming language is Turing complete if it
can be used to describe all the computation that
a Turing machine can perform - A programming language is Turing complete if it
has integer variables and arithmetic operators,
assignment statements, sequence statements,
selection statements, and iteration statements
9Levels of Programming Languages
- Machine languages
- Assembly languages
- High-level languages
10Definition of Programming Languages
- The Syntax of a programming language specifies
the structure of programs - The Semantics of a programming language specifies
the meaning of programs
11Syntax
An if-statement consists of the word if
followed by an expression inside parentheses,
followed by a statement, followed by an optional
else part consisting of the word else and
another statement.
12Semantics
An if-statement is executed by first evaluating
its expression, which must have arithmetic or
pointer type, including all side effects, and if
it compares unequal to 0, the statement following
the expression is executed. If there is an else
part, and the expression is 0, the statement
following the else is executed.
13Formal Definition of Programming Languages
- The Syntax of a programming language is usually
formally defined by context-free grammars - The Semantics of a programming language is
usually informally defined by human languages. It
can be partially defined in a formal language
using operational semantics, denotational
semantics, or axiomatic semantics
14Implementation of Programming Languages
- A compiler is a program that can translate
programs written in a language into programs
written in another language - An interpreter is a program that can understand a
language and execute programs written in that
language
15Compilers
Target program
Compiler
Output
16Interpreters
Interpreter
17Virtual Machines
- An interpreter can be viewed as a virtual machine
that can directly execute a high level
programming language - Compilers and interpreters are relative concepts.
Many programming languages have both a compiler
and an interpreter - Java has a compiler that translates the Java
programs into Java byte codes. The Java virtual
machine is an interpreter that can directly
execute Java byte codes
18Abstractions in Programming Languages
- A programming language provides abstractions of
the computation that are easy to understand, even
by persons not familiar with the underlying
details of the computer
19Abstract
??
??
- Draw the common properties from all the instances
- Adopt the essential properties from the whole
system
20Abstractions
Data
Control
Operations
21Abstractions
- Data abstractions abstract properties of data,
such as numbers, character strings, trees, which
are subjects of computation - Control abstractions abstract properties of
control, such as loops, conditional statements,
and procedures
22Data Abstractions
- Basic abstractions basic data types such as
integers, floating point numbers, and characters - Structured abstractions structured data types
such as arrays and records - Unit abstractions abstract data types such as
stacks, queues, trees, and graphs
23Control Abstractions
- Basic abstractions basic statements such as
assignment statement and goto statement - Structured abstractions structured statements
such as if-statement, while-statement, and
procedures - Unit abstractions abstract data types such as
stacks, queues, trees, graphs
24Abstraction of Operations
Basic data types
Basic statements
Structured data types
Structured statements
Abstract data types
25Abstraction of Operations
Machine Operations
Machine Languages
26Paradigms of Programming Languages
- Imperative programming a series of commands
Fortran, Pascal, C, Ada - Object-oriented programming a class of objects
Simula, Smalltalk, C, Java - Functional programming a collection of
mathematical function definitions Scheme, ML,
Haskell - Logic programming a collection of logical
predicates Prolog, Godel
27Imperative Programming
int gcd(int u, int v) int t while (v
! 0) t u v u v
v t return u
How
28Object-Oriented Programming
public class IntWithGcd private int
value public IntWithGcd(int val) value
val public int intValue() return value
public int gcd(int v) int z
value int y v while (y ! 0)
int t u v z y y t
return z
How
29Functional Programming
u , if v 0
gcd(u, v) gcd (v,
u v), otherwise.
gcd u v if v 0 then u
else gcd(v (u mod v))
What
30Logic Programming
V 0 ? gcd(U, V) U V ? 0, Y U V,
gcd(V, Y) X ? gcd(U, V) X
gcd(U, V, U) - V 0. gcd(U, V, X) - not
(V 0), Y is U mod V, gcd(V, Y, X).
What
31Language Design Criteria ?
- It is very difficult to offer criteria for good
programming language design - Criteria for good programming language design
often conflict each other - A programming language can be a success or
failure for many different reasons - Programming language design is a goal-orientd
activity
32Efficiency
- Efficiency of compiler construction
implementability - Efficiency of compiler execution simplicity,
reliability - Efficiency of program construction writability,
expressiveness - Efficiency of program execution optimizability
- Efficiency of program modification readability,
maintainability
33Regularity
- Regularity is a measure of how well a language
integrates its features, so that there are no
unusual restrictions, interactions, or behaviors - Regularity can be placed in subcategories
Generality, Orthogonality, Uniformity
34Generality
- Do constructs have as few restrictions as
possible? - Functions
- In Pascal, functions can be passed as parameters,
but there are no function variables. - C lacks nested functions.
- Scheme and ML have completely general functions
- Fortran can pass variable-length array
parameters, but cannot define variable-length
array variables
35Orthogonality
- Can constructs be combined in any meaningful way?
- Return types of functions
- In Pascal, functions can return only scalar or
pointer types as values. - In C and C, values of all types, except array
types, can be returned. - In Ada and functional languages, values of all
types can be returned
36Uniformity
- Do similar things look the same, and do different
things look different? - In C, a semicolon is necessary after a class
definition but forbidden after a function
definition - In Pascal, returned values from functions look
like assignments
37Other Criteria
- Simplicity make things as simple as possible,
but not simpler. (Pascal, C) - Expressiveness make it possible to express
conceptual abstractions directly and simply.
(Scheme, Simula67) - Extensibility allow the programmer to extend the
language in various ways. (Scheme, C)
38Other Criteria
- Security programs cannot do unexpected damage.
(Pascal, Java) - Preciseness having a definition that can answer
programmers and implementers questions. (Most
languages today, but only one has a mathematical
definition ML) - Machine-independence should run the same on any
machine. (Java)
39Other Criteria
- Consistent with accepted notations. (Most
languages today, but not APL) - Restrictability a programmer can program
effectively in a subset of the full language.
(C avoids runtime penalties)
40C A Case Study
- Thanks to Bjarne Stroustrup, C is not only a
great success story, but also the best-documented
language development effort in history - 1997 The C Programming Language, 3rd Edition
(Addison-Wesley). - 1994 The Design and Evolution of C
(Addison-Wesley). - 1993 A History of C 1979-1991, SIGPLAN Notices
28(3).
41Course Contents
- Introduction
- Syntax
- Functional programming
- Logic programming
- Basic semantics
- Data types
- Expressions
- Statements
- Procedures
- Modules
- Exceptions
- Conclusion