Sei sulla pagina 1di 41

Introduction to Programming

Languages

Nai-Wei Lin
Department of Computer Science and
Information Engineering
National Chung Cheng University
Chapter 1
Introduction
Outline

 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

3
What Is a Programming Language

 A natural language is designed to


communicate between human
 A programming language is designed to
communicate between human and
computers

4
How we communicate
influences how we think,
and vice versa.

5
A programming language is
a notation
for describing computation
in computer-readable and
human-readable form
6
Computation

 Computation is usually defined formally


using the mathematical concept of a Turing
machine
 Church’s thesis states that it is not possible
to build a machine that is inherently more
powerful than a Turing machine

7
Turing 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

8
Levels of Programming Languages

 Machine languages

 Assembly languages

 High-level languages

9
Definition 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

10
Syntax

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.

11
Semantics

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.

12
Formal 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
13
Implementation 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

14
Compilers

Source Target
Compiler
program program

Target
Input Output
program

15
Interpreters

Input

Source Output
Interpreter
program

16
Virtual 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
17
Abstractions 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

18
Abstract 抽象 摘要

 Draw the common properties from all the


instances
 Adopt the essential properties from the whole
system

19
Abstractions

The set of
operations The sequence of
associated operations to be
with each processed
data object
Data Control

Operations

20
Abstractions

 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

21
Data 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

22
Control 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

23
Abstraction of Operations

Basic data types Basic statements

Structured data types Structured statements

Abstract data types

24
Abstraction of Operations

High-Level Languages
Abstract Operations

Machine Operations
Machine Languages

25
Paradigms 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
26
Imperative Programming

int gcd(int u, int v) {


int t;
while (v != 0) {
How
t = u % v;
u = v;
v = t;
}
return u;
}
27
Object-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) { How
int t = u % v; z = y; y = t;
}
return z;
}
28
Functional 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

29
Logic 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,
What gcd(V, Y, X).

30
Language 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

31
Efficiency
 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

32
Regularity

 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

33
Generality
 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
34
Orthogonality

 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

35
Uniformity

 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

36
Other 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++)

37
Other 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)

38
Other 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)

39
C++: 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).

40
Course Contents

 Introduction Expressions

 Syntax Statements

 Functional programming Procedures

 Logic programming Modules

 Basic semantics Exceptions

 Data types Conclusion

41

Potrebbero piacerti anche