0% found this document useful (0 votes)
42 views

VanRoy-Concepts, Techniques and Models in Computer Programming

Uploaded by

juan paco
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views

VanRoy-Concepts, Techniques and Models in Computer Programming

Uploaded by

juan paco
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 44

Concepts, Techniques, and Models

of Computer Programming
Dec. 9, 2004

Peter Van Roy


Université catholique de Louvain
Louvain-la-Neuve, Belgium

Seif Haridi
Kungliga Tekniska Högskolan
Kista, Sweden

Invited talk, British Computer Society


Advanced Programming Specialist Group

9/12/2004 P. Van Roy, BCS talk 1


Overview
 Goals of the book
 What is programming?
 Concepts-based approach
 History
 Creative extension principle
 Teaching programming
 Examples to illustrate the approach
 Concurrent programming
 Data abstraction
 Graphical user interface programming
 Object-oriented programming: a small part of a big world
 Formal semantics
 Conclusion
9/12/2004 P. Van Roy, BCS talk 2
Goals of the book
 To present programming as a unified discipline
in which each programming paradigm has its
part
 To teach programming without the limitations
of particular languages and their historical
accidents of syntax and semantics
 Today’s talk will touch on both of these goals
and how they are realized by the book
“Concepts, Techniques, and Models of
Computer Programming”
9/12/2004 P. Van Roy, BCS talk 3
What is programming?
 Let us define “programming” broadly
 The act of extending or changing a system’s
functionality
 For a software system, it is the activity that starts with a
specification and leads to its solution as a program
 This definition covers a lot
 It covers both programming “in the small” and “in the
large”
 It covers both (language-independent) architectural
issues and (language-dependent) coding issues
 It is unbiased by the limitations of any particular
language, tool, or design methodology
9/12/2004 P. Van Roy, BCS talk 4
Concepts-based approach
 Factorize programming languages into their primitive
concepts
 Depending on which concepts are used, the different
programming paradigms appear as epiphenomena
 Which concepts are the right ones? An important question
that will lead us to the creative extension principle: add
concepts to overcome limitations in expressiveness.
 For teaching, we start with a simple language with few
concepts, and we add concepts one by one according to
this principle
 We have applied this approach in a much broader and
deeper way than has been done before
 Using research results from a long-term collaboration

9/12/2004 P. Van Roy, BCS talk 5


History (1)
 The concepts-based approach distills the results of a long-term
research collaboration that started in the early 1990s
 ACCLAIM project 1991-94: SICS, Saarland University, Digital PRL, …
 AKL (SICS): unifies the concurrent and constraint strains of logic
programming, thus realizing one vision of the FGCS
 LIFE (Digital PRL): unifies logic and functional programming using logical
entailment as a delaying operation (logic as a control flow mechanism!)
 Oz (Saarland U): breaks with Horn clause tradition, is higher-order,
factorizes and simplifies previous designs
 After ACCLAIM, these partners decided to continue with Oz
 Mozart Consortium since 1996: SICS, Saarland University, UCL
 The current design is Oz 3
 Both simpler and more expressive than previous designs
 Distribution support (transparency), constraint support (computation
spaces), component-based programming
 High-quality open source implementation: Mozart
9/12/2004 P. Van Roy, BCS talk 6
History (2)
 In the summer of 1999, the two authors realized that they
understood programming well enough to teach it in a unified way
 We started work on a textbook and we started teaching with it
 Little did we realize the amount of work it would take. The book was
finally completed near the end of 2003 and turned out a great deal
thicker than we anticipated. It appeared in 2004 from MIT Press.
 Much new understanding came with the writing and organization
 The book is organized according to the creative extension principle
 We were much helped by the factorized design of the Oz language;
the book “deconstructs” this design and presents a large subset of it
in a novel way
 We rediscovered important computer science that was “forgotten”,
e.g., determinate concurrency, objects vs. ADTs
 Both were already known in the 1970s, but largely ignored afterward!

9/12/2004 P. Van Roy, BCS talk 7


Creative extension principle
 Language design driven by limitations in expressiveness
 With a given language, when programs start getting
complicated for technical reasons unrelated to the problem
being solved, then there is a new programming concept waiting
to be discovered
 Adding this concept to the language recovers simplicity
 A typical example is exceptions
 If the language does not have them, all routines on the call path
need to check and return error codes (non-local changes)
 With exceptions, only the ends need to be changed (local changes)
 We rediscovered this principle when writing the book!
 Defined formally and published in 1990 by Felleisen et al

9/12/2004 P. Van Roy, BCS talk 8


Example of
creative extension principle
Language proc {P1 … E1} Language proc {P1 …}
without exceptions {P2 … E2} with exceptions try
if E2 then … end {P2 …}
E1=… catch E then … end
end end
Error treated here Error treated here
proc {P2 … E2} proc {P2 …}
{P3 … E3} {P3 …}
if E3 then … end end
E2=… Unchanged
end proc {P3 …}
Only procedures at
All procedures on {P4 …}
ends are modified
path are modified proc {P3 … E3} end
{P4 … E4}
if E4 then … end proc {P4 …}
E3=… if (error) then
end raise myError end
Error occurs here
end
proc {P4 … E4} end
if (error) then E4=true
Error occurs here else E4=false end
end
9/12/2004 P. Van Roy, BCS talk 9
Taxonomy of paradigms
Declarative programming
Strict functional programming, Scheme, ML
Deterministic logic programming, Prolog  This diagram shows some of
the important paradigms and
+ concurrency how they relate according to
+ by-need synchronization the creative extension principle
Declarative (dataflow) concurrency  Each paradigm has its pluses
Lazy functional programming, Haskell and minuses and areas in
which it is best
+ nondeterministic choice
Concurrent logic programming, FCP Concurrent OOP
(message passing, Erlang, E)
+ exceptions (shared state, Java)
+ explicit state
Object-oriented programming, Java, C++

+ search + computation spaces


Nondeterministic logic prog., Prolog Constraint programming
9/12/2004 P. Van Roy, BCS talk 10
Complete set of concepts (so far)
<s> ::=
skip Empty statement
<x>1=<x>2 Variable binding
<x>=<record> | <number> | <procedure> Value creation
<s>1 <s>2 Sequential composition
local <x> in <s> end Variable creation

if <x> then <s>1 else <s>2 end Conditional


case <x> of <p> then <s>1 else <s>2 end Pattern matching
{<x> <x>1 … <x>n} Procedure invocation
thread <s> end Thread creation
{WaitNeeded <x>} By-need synchronization

{NewName <x>} Name creation


<x>1= !!<x>2 Read-only view
try <s>1 catch <x> then <s>2 end Exception context
raise <x> end Raise exception
{NewPort <x>1 <x>2} Port creation
{Send <x>1 <x>2} Port send

<space> Encapsulated search

9/12/2004 P. Van Roy, BCS talk 11


Complete set of concepts (so far)
<s> ::=
skip Empty statement
<x>1=<x>2 Variable binding
<x>=<record> | <number> | <procedure> Value creation
<s>1 <s>2 Sequential composition
local <x> in <s> end Variable creation

if <x> then <s>1 else <s>2 end Conditional


case <x> of <p> then <s>1 else <s>2 end Pattern matching
{<x> <x>1 … <x>n} Procedure invocation
thread <s> end Thread creation
{WaitNeeded <x>} By-need synchronization

{NewName <x>} Name creation


<x>1= !!<x>2 Read-only view
try <s>1 catch <x> then <s>2 end Exception context
raise <x> end Raise exception
{NewCell <x>1 <x>2} Cell creation Alternative
{Exchange <x>1 <x>2 <x>3} Cell exchange

<space> Encapsulated search

9/12/2004 P. Van Roy, BCS talk 12


Teaching programming
 How can we teach programming without being
tied down by the limitations of existing tools and
languages?
 Programming is almost always taught as a craft
in the context of current technology (e.g., Java
and its tools)
 Any science given is either limited to the current
technology or is too theoretical
 The concepts-based approach shows one way
to solve this problem

9/12/2004 P. Van Roy, BCS talk 13


How can we teach
programming paradigms?
 Different languages support different paradigms
 Java: object-oriented programming
 Haskell: functional programming
 Erlang: concurrent programming (for reliability)
 Prolog: logic programming
 …
 We would like to understand all these paradigms!
 They are all important and practical
 Does this mean we have to study as many languages?
 New syntaxes to learn …
 New semantics to learn …
 New systems to learn …
 No!
9/12/2004 P. Van Roy, BCS talk 14
Our pragmatic solution
 Use the concepts-based approach
 With Oz as the single language
 With Mozart as the single system
 This supports all the paradigms we want to teach
 But we are not dogmatic about Oz
 We use it because it fits the approach well
 We situate other languages inside our general framework
 We can give a deep understanding rather quickly, for example:
 Visibility rules of Java and C++
 Inner classes of Java
 Good programming style in Prolog
 Message receiving in Erlang
 Lazy programming style in Haskell

9/12/2004 P. Van Roy, BCS talk 15


Teaching with the concepts-
based approach (1)
 We show languages in a progressive way
 We start with a small language containing just a few
programming concepts
 We show how to program and reason in this language
 We then add concepts one by one to remove
limitations in expressiveness
 In this way we cover all major programming
paradigms
 We show how they are related and how and when to
use them together

9/12/2004 P. Van Roy, BCS talk 16


Teaching with the concepts-
based approach (2)
 Similar approaches have been used before
 Notably by Abelson & Sussman in “Structure and
Interpretation of Computer Programs”
 We apply the approach both broader and
deeper: we cover more paradigms and we
have a simple formal semantics for all
concepts
 We have especially good coverage of
concurrency and data abstraction

9/12/2004 P. Van Roy, BCS talk 17


Some courses (1)
 Second-year course (Datalogi II at
KTH, CS2104 at NUS) by Seif Haridi
and Christian Schulte Declarative

 Start with declarative programming programming

 Explain declarative techniques and


+ threads
higher-order programming
 Explain semantics Declarative
 Add threads: leads to declarative concurrency
concurrency
 Add ports (communication channels): + ports
leads to message-passing
concurrency (agents) Message-passing
concurrency
 Declarative programming,
concurrency, and multi-agent systems
 For deep reasons, this is a better
start than OOP
9/12/2004 P. Van Roy, BCS talk 18
Some courses (2)
 Second-year course (FSAC1450
at UCL) by Peter Van Roy
 Start with declarative
programming Declarative

 Explain declarative techniques programming

 Explain semantics
+ cells + threads
 Add cells (mutable state)
 Explain data abstraction: objects
Stateful Declarative
and ADTs
programming and concurrency
 Explain object-oriented data abstraction and agents
programming: classes,
polymorphism, and inheritance
 Add threads: leads to declarative
concurrency
 Most comprehensive overview in
one course
9/12/2004 P. Van Roy, BCS talk 19
Some courses (3)
 Third-year course (INGI2131 at
UCL) by Peter Van Roy
Declarative
 Review of declarative programming
programming
 Add threads: leads to declarative
concurrency
 Add by-need synchronization: + threads
leads to lazy execution
 Combining lazy execution and Declarative
concurrency concurrency
 Add ports (communication channels):
leads to message-passing + ports + cells
concurrency
 Designing multi-agent systems
Message-passing Shared-state
 Add cells (mutable state): leads to
concurrency concurrency
shared-state concurrency
 Tuple spaces (Linda-like)
 Locks, monitors, transactions
 Focus on concurrent programming
9/12/2004 P. Van Roy, BCS talk 20
Examples showing the
usefulness of the approach
 The concepts-based approach gives a broader
and deeper view of programming than the more
traditional language- or tool-oriented approach
 Let us see some examples of this:
 Concurrent programming
 Data abstraction
 Graphical user interface programming
 Object-oriented programming in a wider framework
 We explain these examples

9/12/2004 P. Van Roy, BCS talk 21


Concurrent programming
 There are three main paradigms of concurrent programming
 Declarative (dataflow; deterministic) concurrency
 Message-passing concurrency (active entities that send
asynchronous messages; Erlang style)
 Shared-state concurrency (active entities that share common
data using locks and monitors; Java style)
 Declarative concurrency is very useful, yet is little known
 No race conditions; declarative reasoning techniques
 Large parts of programs can be written with it
 Shared-state concurrency is the most complicated, yet it is
the most widespread!
 Message-passing concurrency is a better default
9/12/2004 P. Van Roy, BCS talk 22
Example of
declarative concurrency
 Producer/consumer with dataflow
proc {Cons Xs}
fun {Prod N Max}
case Xs of X|Xr then
if N<Max then Xs
Prod Cons {Display X}
N|{Prod N+1 Max}
{Cons Xr}
else nil end
[] nil then skip end
end
end

local Xs in  Prod and Cons threads share dataflow


thread Xs={Prod 0 1000} end list Xs
thread {Cons Xs} end  Dataflow behavior of case statement
(synchronize on data availability) gives
end
stream communication
 No other concurrency control needed
9/12/2004 P. Van Roy, BCS talk 23
Data abstraction
 A data abstraction is a high-level view of data
 It consists of a set of instances, called the data, that can be
manipulated according to certain rules, called the interface
 The advantages of this are well-known, e.g., it is simpler to
use, it segregates responsibilities, it simplifies maintenance,
and the implementation can provide some behavior
guarantees
 There are at least four ways to organize a data
abstraction
 According to two axes: bundling and state

9/12/2004 P. Van Roy, BCS talk 24


Objects and ADTs
 The first axis is bundling
 An abstract data type (ADT) has separate values
and operations
 Example: integers (values: 1, 2, 3, …; operations: +, -, *,
div, …)
 Canonical language: CLU (Barbara Liskov et al, 1970s)
 An object combines values and operations into a
single entity
 Example: stack objects (instances with push, pop, isEmpty
operations)
 Canonical language: Smalltalk (Xerox PARC, 1970s)

9/12/2004 P. Van Roy, BCS talk 25


Have objects won?
 Absolutely not! Currently popular “object-oriented” languages
actually mix objects and ADTs
 For example, in Java:
 Basic types such as integers are ADTs (which is nothing to
apologize about)
 Instances of the same class can access each other’s private
attributes (which is an ADT property)
 To understand these languages, it’s important for students to
understand objects and ADTs
 ADTs allow to express efficient implementation, which is not
possible with pure objects (even Smalltalk is based on ADTs!)
 Polymorphism and inheritance work for both objects and ADTs,
but are easier to express with objects
 For more information and explanation, see the book!
9/12/2004 P. Van Roy, BCS talk 26
Summary of data abstractions
state

Stateful Stateful ADT Pure object


The usual one!

Stateless Pure ADT Declarative object

bundling
Abstract Object
data type

• The book explains how to program these four


possibilities and says what they are good for
9/12/2004 P. Van Roy, BCS talk 27
Graphical user interface
programming
 There are three main approaches:
 Imperative approach (AWT, Swing, tcl/tk, …): maximum
expressiveness with maximum development cost
 Declarative approach (HTML): reduced development cost
with reduced expressiveness
 Interface builder approach: adequate for the part of the
GUI that is known before the application runs
 All are unsatisfactory for dynamic GUIs, which
change during execution

9/12/2004 P. Van Roy, BCS talk 28


Mixed declarative/imperative
approach to GUI design
 Using both approaches together is a plus:
 A declarative specification is a data structure. It is
concise and can be calculated in the language.
 An imperative specification is a program. It has
maximum expressiveness but is hard to manipulate
formally.
 This makes creating dynamic GUIs very easy
 This is an important foundation for model-based
GUI design, an important methodology for
human-computer interfaces

9/12/2004 P. Van Roy, BCS talk 29


Example GUI

Nested record with W=td(lr(label(text:”Enter your name”)


handler object E and entry(handle:E))
action procedure P button(text:”Ok” action:P))

Construct interface {Build W}
(window & handler object)

{E set(text:”Type here”)}
Call the handler object Result={E get(text:$)}
9/12/2004 P. Van Roy, BCS talk 30
Example dynamic GUI

W=placeholder(handle:P)

{P set( label(text:”Hello”) )}
{P set( entry(text:”World”) )}

 Any GUI specification can be put in the placeholder at run-


time (the spec is a data structure that can be calculated)
9/12/2004 P. Van Roy, BCS talk 31
Object-oriented programming:
a small part of a big world
 Object-oriented programming is just one tool in a
vastly bigger world
 For example, consider the task of building robust
telecommunications systems
 Ericsson has developed a highly available ATM switch, the
AXD 301, using a message-passing architecture (more
than one million lines of Erlang code)
 The important concepts are isolation, concurrency, and
higher-order programming
 Not used are inheritance, classes and methods, UML
diagrams, and monitors
9/12/2004 P. Van Roy, BCS talk 32
Formal semantics
 It’s important to put programming on a solid
foundation. Otherwise students will have
muddled thinking for the rest of their careers.
 Typical mistake: confusing syntax and semantics
 We propose a flexible approach, where more or
less semantics can be given depending on your
taste and the course goals
 The foundation of all the different semantics is an
operational semantics, an abstract machine

9/12/2004 P. Van Roy, BCS talk 33


Three levels of teaching
semantics
 First level: abstract machine (the rest of this talk)
 Concepts of execution stack and environment
 Can explain last call optimization and memory
management (including garbage collection)
 Second level: structural operational semantics
 Straightforward way to give semantics of a practical
language
 Directly related to the abstract machine
 Third level: develop the mathematical theory
 Axiomatic, denotational, and logical semantics are
introduced for the paradigms in which they work best
 Primarily for theoretical computer scientists
9/12/2004 P. Van Roy, BCS talk 34
Abstract machine
 The approach has three
steps: Full language
 Full language: includes all
syntactic support to help the Remove syntax
programmer
 Kernel language: contains all
Kernel language
the concepts but no syntactic
support
Execute
 Abstract machine: execution of
programs written in the kernel
language Abstract machine

9/12/2004 P. Van Roy, BCS talk 35


Translating to kernel language
proc {Fact N F}
fun {Fact N} local B in
if N==0 then 1 B=(N==0)
else N*{Fact N-1} if B then F=1
else
end local N1 F1 in
end N1=N-1
{Fact N1 F1}
All syntactic aids are removed: all F=N*F1
identifiers are shown (locals and end
output arguments), all functions end
become procedures, etc. end
end
9/12/2004 P. Van Roy, BCS talk 36
Syntax of a simple
kernel language (1)
 EBNF notation; <s> denotes a statement

<s> ::= skip


| <x>1=<x>2
| <x>=<v>
| local <x> in <s> end
| if <x> then <s>1 else <s>2 end
| {<x> <x>1 … <x>n}
| case <x> of <p> then <s>1 else <s>2 end

<v> ::= …
<p> ::= …
9/12/2004 P. Van Roy, BCS talk 37
Syntax of a simple
kernel language (2)
 EBNF notation; <v> denotes a value, <p> denotes a pattern

<v> ::= <record> | <number> | <procedure>


<record>, <p> ::= <lit> | <lit>(<feat>1:<x>1 … <feat>n:<x>n)
<number> ::= <int> | <float>
<procedure> ::= proc {$ <x>1 … <x>n} <s> end

 This kernel language covers a simple declarative paradigm


 Note that it is definitely not a “theoretically minimal” language!
 It is designed to be simple for programmers, not to be
mathematically minimal
 This is an important principle throughout the book!
 We want to show programming techniques
 But the semantics is still simple and usable for reasoning
9/12/2004 P. Van Roy, BCS talk 38
Abstract machine concepts
 Single-assignment store σ = {x1=10, x2, x3=20}
 Variables and their values
 Environment E = {X → x, Y → y}
 Link between program identifiers and store variables
 Semantic statement (<s>,E)
 A statement with its environment
 Semantic stack ST = [(<s>1,E1), …, (<s>n,En)]
 A stack of semantic statements, “what remains to be done”
 Execution (ST1,σ1) → (ST2,σ2) → (ST3,σ3) → …
 A sequence of execution states (stack + store)

9/12/2004 P. Van Roy, BCS talk 39


The local statement
 (local X in <s> end, E)
 Create a new store variable x
 Add the mapping {X → x} to the environment

(local X in <s> end, E) (<s>,E+{X → x})


S2 S2

σ … σ∪{x}
Sn Sn

stack store stack store

9/12/2004 P. Van Roy, BCS talk 40


The if statement
 (if <x> then <s>1 else <s>2 end, E)
 This statement has an activation condition:
E(<x>) must be bound to a value
 Execution consists of the following actions:
 If the activation condition is true, then do:
 If E(<x>) is not a boolean, then raise an error condition
 If E(<x>) is true, then push (<s>1 , E) on the stack
 If E(<x>) is false, then push (<s>2 , E) on the stack

 If the activation condition is false, then the execution does


nothing (it suspends)
 If some other activity makes the activation condition true, then
execution continues. This gives dataflow synchronization,
which is at the heart of declarative concurrency.
9/12/2004 P. Van Roy, BCS talk 41
Procedures (closures)
 A procedure value (closure) is a pair
(proc {$ <y>1 … <y>n} <s> end, CE)
where CE (the “contextual environment”) is E|<z>1 ,…,<z>n with
E the environment where the procedure is defined and
{<z>1, …, <z>n} the set of the procedure’s external identifiers
 A procedure call ({<x> <x>1 … <x>n}, E) executes as follows:
 If E(<x>) is a procedure value as above, then push
(<s>, CE+{<y>1→E(<x>1), …, <y>n→E(<x>n)})
on the semantic stack
 This allows higher-order programming as in functional
languages

9/12/2004 P. Van Roy, BCS talk 42


Use of the abstract machine
 With it, students can work through program
execution at the right level of detail
 Detailed enough to explain many important properties
 Abstract enough to make it practical and machine-
independent (e.g., we do not go down to the machine
architecture level!)
 We use it to explain behavior and derive properties
 We explain last call optimization
 We explain garbage collection
 We calculate time and space complexity of programs
 We explain higher-order programming
 We give a simple semantics for objects and inheritance
9/12/2004 P. Van Roy, BCS talk 43
Conclusions
 We presented the concepts-based approach, one way to
organize the discipline of computer programming
 Programming languages are organized according to their concepts
 New concepts are added to overcome limitations in expressiveness
(creative extension principle)
 The complete set of concepts covers all major programming
paradigms
 We gave examples of how this approach gives insight
 Concurrent programming, data abstraction, GUI programming, the
role of object-oriented programming
 We have written a textbook published by MIT Press in 2004 and
are using it to teach second-year to graduate courses
 The textbook covers both theory (formal semantics) and practice
(using the Mozart Programming System)
 The textbook is based on research done in the Mozart Consortium
 For more information see http://www.info.ucl.ac.be/people/PVR/book.html
 See also Second Int’l Mozart/Oz Conference (Springer LNAI 3389)
9/12/2004 P. Van Roy, BCS talk 44

You might also like