+ All Categories
Home > Documents > PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte [email protected]...

PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte [email protected]...

Date post: 19-Dec-2015
Category:
View: 214 times
Download: 1 times
Share this document with a friend
65
PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 11 2009-12-02 Christian Schulte [email protected] Software and Computer Systems School of Information and Communication Technology KTH – Royal Institute of Technology Stockholm, Sweden
Transcript
Page 1: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

PROGRAMMING PARADIGMS AND LANGUAGES

ID1218 Lecture 11 2009-12-02

Christian [email protected]

Software and Computer SystemsSchool of Information and Communication

TechnologyKTH – Royal Institute of Technology

Stockholm, Sweden

Page 2: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Overview

Programming paradigms and features functional programming concurrent programming

Programming languages language description

syntax and semantics language execution

compilers and execution environments

Other courses

L11, 2009-12-02ID1218, Christian Schulte

2

Page 3: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Functional Programming

L11, 2009-12-02

3

ID1218, Christian Schulte

Page 4: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Characteristics

Computation amounts to recursive evaluation of expressions

expressions defined by functions typically, functions are first-class citizens:

generic functions Pure functional programming

value of expressions only depends on values of subexpressions

no side effects functions can be understood in isolation

L11, 2009-12-02ID1218, Christian Schulte

4

Page 5: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Parametric Polymorphism

First-class functions support parametric polymorphism

functions can compute for different types of arguments

length of lists: parametric wrt type of list elements map over list: parametric wrt function provided

function type fits type of list elements Other forms of polymorphism

ad-hoc polymorphism: overloading object-based polymorphism: programs can compute

for different types of objects implemented by late binding (Java, virtual in C++)

L11, 2009-12-02ID1218, Christian Schulte

5

Page 6: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Applications

Anything that has to do with symbolic processing

theorem provers, … generating highly efficient code for FFT …

Check the following webpageFunctional Programming in the Real Worldhttp://homepages.inf.ed.ac.uk/wadler/realworld

L11, 2009-12-02ID1218, Christian Schulte

6

Page 7: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

FP Inspired: MapReduce

MapReduce: Simplified Data Processing on Large Clusters J. Dean, S. Ghemawat (Google) [OSDI, 2004]

Programming model and implementation for processing and generating large data sets

Users specify map function that maps key/value pair to intermediate key/value pair reduce (fold) function merges intermediate values associated with the

same intermediate key Programs written in this functional style are automatically

parallelized and executed on a large cluster of commodity MapReduce runs on large cluster of commodity machines

and is highly scalable: many terabytes of data on thousands of machines

Hundreds of MapReduce programs have been implemented

L11, 2009-12-02ID1218, Christian Schulte

7

Page 8: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Typing Disciplines

Different approaches to typing possible static versus dynamic typing: check types at

compile time (static) or at runtime (dynamic) weak versus strong typing: types can be

changed and are possibly changed automatically

Examples: Erlang: strong, dynamic Java: strong, static C++: weak, static

L11, 2009-12-02ID1218, Christian Schulte

8

Page 9: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Static Typing in FP

One goal of functional programming is simplicity and conciseness

functions as simple mathematical model data types with pattern matching for conciseness

Declaring types puts burden on programmer in contrast to simplicity of FP

Idea in FP: type inference automatically infer types from program check that inferred types are used consistently infer most general types that works with polymorphism

L11, 2009-12-02ID1218, Christian Schulte

9

Page 10: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Type Inference

Infer type of expression by how it is used or defined

len([]) -> 0;len([_|Xr]) -> len(Xr) + 1. 1 has type int len(Xr) must have type int (due to +) len/1 must have return type int len/1 must have argument type list has (polymorphic) type: .list() int

L11, 2009-12-02ID1218, Christian Schulte

10

Page 11: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Type Inference

Infer type of expression by how it is used or defined

map(F,[]) -> [];map(F,[X|Xr]) -> [F(X)|map(F,Xr)]. F has type F(X) has type X has type map/2 has type

..( ) list() list() Hindley-Milner (Damas-Milner) type system

support automatic type inference of polymorphic types

L11, 2009-12-02ID1218, Christian Schulte

11

Page 12: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Input – Output, Side Effects

Problem in Erlang: functions can have side effects (message sending)

Leads to inconvenient restrictions guards can be not user-defined

Other solutions make side effects manifest in types (monads) declare that functions are side effect free

(const in C++)

L11, 2009-12-02ID1218, Christian Schulte

12

Page 13: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Functional Programming Languages

Dynamically typed languages Erlang, Scheme, LISP

Statically typed with type inference Standard ML (OCaml) Haskell F#

Widely used in education, …

L11, 2009-12-02ID1218, Christian Schulte

13

Page 14: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Logic Programming

Logic programming: relations instead of functionsapp([],Ys,Ys).app([X|Xr],Ys,[X|Zr]) :- app(Xr,Ys,Zr). uses relational representation of append function

Can be used in several directions app([1,2],[3,4],Zs)

Zs=[1,2,3,4] app(Xs,Ys,[1,2])

Xs=[],Ys=[1,2]; Xs=[1],Ys=[2]; Xs=[1,2],Ys=[] uses search and unification

Implemented by, for example, Prolog

L11, 2009-12-02ID1218, Christian Schulte

14

Page 15: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Concurrent Programming

L11, 2009-12-02

15

ID1218, Christian Schulte

Page 16: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Models

Share nothing between threads data structures are private to a thread threads communicate by passing data

structures as messages example: Erlang

Share data structures between threads heap-allocated objects are shared threads communicate by access to shared data

structures examples: Java, pthreads for C++

L11, 2009-12-02ID1218, Christian Schulte

16

Page 17: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Concurrency in Java

Create threads by create an object that implements a runnable

interface (java.lang.Runnable), in particular a run() method

create a new thread (java.lang.Thread) that executes run() method of runnable

threads are heavy weight, much more expensive than Erlang's processes

more detail: thread groups, …

L11, 2009-12-02ID1218, Christian Schulte

17

Page 18: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Synchronization in Java

Java guarantees that most primitive operations are atomic

Methods (and code blocks) can be synchronized

each object has a lock at most one thread can hold the lock threads will be blocked if lock is already taken

Threads waiting on lock can be notified supports variants: wait, notify, notifyAll

L11, 2009-12-02ID1218, Christian Schulte

18

Page 19: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Concurrency Complexity

Concurrency in Erlang is natural no explicit synchronization required all synchronization is automatically tied to receive

Concurrency in Java requires careful design which methods must be synchronized what is interaction between several threads using

the same object

Orthogonal: how to guarantee liveness and safety

L11, 2009-12-02ID1218, Christian Schulte

19

Page 20: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Distributed Programming

Distribution (and parallelism) presupposes concurrency

concurrent activities execute in parallel Sharing with distribution

difficult to achieve fully Java (RMI) uses approximation

Message passing is straightforward for distribution

semantic gap smaller

L11, 2009-12-02ID1218, Christian Schulte

20

Page 21: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Language Description

L11, 2009-12-02

21

ID1218, Christian Schulte

Page 22: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Describing Languages

Syntax of programming language syntactical form of programs, statements,

expressions, …

Semantics of programming language describes the meaning of a program what is the result how to prove a program correct how is it computed

L11, 2009-12-02ID1218, Christian Schulte

22

Page 23: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Syntax

Syntax description on two levels lexical: how words are formed syntactical: how sentences are formed from

words

Lexical words (lexemes) are grouped into tokens typical token types: identifiers, number, …

Syntax phrasal structure of a program, expression, … syntactical structure represented by a tree

L11, 2009-12-02ID1218, Christian Schulte

23

Page 24: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Lexical Structure

Described by: regular expressions convenient method to describe tokens

Serve as description for programmer and compiler

lexer in compiler creates sequence of words

L11, 2009-12-02ID1218, Christian Schulte

24

Page 25: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

25

Regular Expressions

Symbol a denotes language just containing string a

Alternation M|N where M and N are regular expressions string in language of M|N, if string in language

of M or in language of N Concatenation MN

where M and N are regular expressions string in language of MN, if concatenation of

strings and such that in language of M and in language of N

Page 26: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

26

Regular Expressions

Epsilon denotes language just containing the empty

string Repetition M*

where M is regular expression called Kleene closure string in language of M*, if concatenation of

zero or more strings in language of M

Page 27: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

27

Regular Expression Examples a|b {"a","b"} (a|b)a {"aa","ba"} (ab)| {"ab",""} ((a|b)a)* {"","aa","ba",

"aaaa","aaba", "baaa","baba", …}

Page 28: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Syntactical Structure

Described by context-free grammar (CFG)

describes how a correct program can be derived according to grammar rules

syntactical structure defined by derivation tree (parse tree)

related approaches: BNF and EBNF CFG serves as description for

programmer and compiler compiler uses parser to construct parse trees

L11, 2009-12-02ID1218, Christian Schulte

28

Page 29: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

29

Context-free Grammar

Describes language Has productions of form

symbol symbol symbol … symbol zero or more symbols on rhs

Symbols are either terminal token from alphabet nonterminal appears on lhs of production no token ever on lhs

One nonterminal distinguished as start symbol

Page 30: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

30

Example: Simple Programs

1: S S ; S2: S id := E3: S print ( L )

7: L E

8: L L , E

4: E id

5: E num

6: E E + E

Page 31: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

31

Example Grammar

Terminal symbolsid num print + ,

( ) := ;

Nonterminals: S, E, L Sentence in language

id:=num; id:=id + (id:=num + num, id)

with possible source texta := 7;

b := c + (d := 5 + 6, d)

Page 32: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

32

Derivations

Showing that sentence is in language: perform derivation

start with start symbol repeat: replace nonterminal by one of its rhs

Many different derivations possible leftmost replace leftmost nonterminal rightmost replace rightmost

nonterminal

Page 33: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

33

Derivation Example

S

Page 34: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

34

Derivation Example

SS ; S

Page 35: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

35

Derivation Example

SS ; SS ; id := E

Page 36: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

36

Derivation Example

SS ; SS ; id := Eid := E; id := E

Page 37: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

37

Derivation Example

SS ; SS ; id := Eid := E; id := Eid := num; id := E

Page 38: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

38

Derivation Example

SS ; SS ; id := Eid := E; id := Eid := num; id := Eid := num; id := E + E

Page 39: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

39

Derivation Example

SS ; SS ; id := Eid := E; id := Eid := num; id := Eid := num; id := E + E…id := num; id := id + id

Page 40: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

40

Parse Tree

Parse tree created connect each symbol in derivation to symbol

from which it was derived

Different derivations can have same parse tree

But also: same sentence can have different parse trees…

that's bad: what does the sentence mean

Page 41: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

41

Parse Tree

Example sentence id := id + id + id Derivation

S id := E id := E + E id := E + id id := E + E + id id := id + E + id id := id + id + id

S

:= Eid

+ EE

id id

+ EE id

Page 42: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

42

Same Parse Tree… Derivation?

Example sentence id := id + id + id Derivation

S id := E id := E + E id := E + id id := E + E + id id := E + id + id id := id + id + id

S

:= Eid

+ EE

id id

+ EE id

Page 43: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

43

Another Parse Tree…

Example sentence id := id + id + id Derivation

S id := E id := E + E id := id + E id := id + E + E id := id + E + id id := id + id + id

S

:= Eid

+ EE

id id

+ EEid

Page 44: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

44

Ambiguous Grammars

Ambiguous grammar can derive sentence with two different parse

trees our example grammar is ambiguous can be rewritten to unambiguos grammar:

every sentence has exactly one meaning

Problematic for compiling compilers derive meaning from parse trees

Page 45: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Language Semantics

Model and explain what is computed: axiomatic and denotational how it is computed: operational

Example: MiniErlang semantics is a model of how Erlang computes designed to explain computation can serve as a blueprint of an implementation defines the language

L11, 2009-12-02ID1218, Christian Schulte

45

Page 46: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Semantics

Axiomatic semantics meaning of statements defined by assertions useful for proving (verifying) that programs are

correct wrt specification example: Hoare logic, weakest preconditions

Denotational semantics define meaning of a program useful for deep analysis

L11, 2009-12-02ID1218, Christian Schulte

46

Page 47: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Language Execution

L11, 2009-12-02

47

ID1218, Christian Schulte

Page 48: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

48

Compilation and Execution

How to execute program written in some high-level programming language

Two aspects compilation transform into language good for

execution execution execute program

Page 49: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

49

Compiler

Compiler translates program from one programming language into another

language compiled from source language language compiled to target language

Source language: for programming examples: Java, C, C++, Oz, …

Target language: for execution examples: assembler (x86, MIPS, …), JVM code

Page 50: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

50

Execution

Can be by concrete hardware how to manage memory how to link and load programs take advantage of architectural features

Can be as abstract machine how to interpret abstract machine code

efficiently how to further compile at runtime

Page 51: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

51

Compilation Phases

Frontend depends on source language Backend depends on target architecture Factorize dependencies

frontend backendsource program

object code

intermediate representation

Page 52: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

52

Frontend: Tasks

Lexical analysis how program is composed into tokens (words) typical token classes: identifier, number, keywords,

… creates token stream

Syntax analysis phrasal structure of program (sentences) grammar rules describing how expressions,

statements, etc are formed creates syntax tree

Semantic analysis perform identifier analysis (scope), type checking,

… creates intermediate representation: control flow

graph

Page 53: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

53

Intermediate Representation Control flow graph

nodes are basic blocks: simple and abstract instructions, no incoming/outgoing jumps

edges represent control flow: jumps, conditional jumps (loops), etc

Basic blocks typically contain data dependencies: reading of

and writing to same location must be in order ease reordering by conversion to SSA (static

single assignment) form: new locations assigned only once

Page 54: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

54

Backend: Basic Tasks

Optimization reduce execution time and program size typically independent of target architecture intermediate and complex component:

"midend" Instruction selection

which real instructions for abstract operations Register allocation

which variables are kept in which registers? which variables go to memory

More generic: memory allocation

Page 55: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

55

Optimization

Common subexpression elimination (CSE) reuse intermediate results

Dead-code elimination remove code that can never be executed

Strength reduction make operations in loops cheaper: instead of

multiplying with n, increment by n (iterated array access)

Constant/value propagation propagate information on values of variables

Code motion move invariant code out of loops

Many, many more, …

Page 56: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

56

Instruction Selection: What

Clearly depends on instruction set For abstract operations emit target

machine instructions several operations by one instruction (CISC) one operation by several instructions (RISC)

Depends much on regularity of instruction set

typically simple: RISC architectures can be involved: CISC architectures

register classes, two address instructions, memory addressing, …

Page 57: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

57

Instruction Selection: How

Criterion: fewest instructions or fewest clock cycles

Using matching algorithm maximal munch tree grammars dynamic programming

Simple optimizations: peephole optimization

combine, remove, change instructions on simple local rules

Page 58: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

58

Register Allocation

Find for each temporary value a register if possible: depends on number of registers

If no register free, put temporary in memory

Use spill code: free register temporarily move register to memory reload register from memory

Common technique: register allocation by graph coloring

Page 59: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

59

Register Allocation:Graph Coloring

Instruction selection assumes infinite supply of temporaries

Compute liveness information: when is temporary used first and last

Construct interference graph nodes are temporaries edge between two nodes if live at same time

Color interference graph: no two connected nodes get same color

colors correspond to registers

Page 60: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

60

Additional Techniques

Use precolored nodes for certain registers

Handle different cases for registers registers for passing arguments register for return address caller-save registers callee-save registers

Allows better register utilization more registers available for intermediate

results spilling handled in regular and simple way

Page 61: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

61

Impact of Register Allocation Graph coloring works well with many

(say 32) registers Few registers (Pentium 6-8)

enormous amount of spilling temporaries even spilled in loops! example: 163,355 instructions [Appel, George,

PLDI01] 32 registers 84 spill instructions 8 registers 22,123 spill instructions (about

14%) solution: exploit memory operands in CISC

instructions

Page 62: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

L11, 2009-12-02ID1218, Christian Schulte

62

Summary: Basic Tasks

Basic and simple tasks instruction selection register allocation

Impact of target architecture number of registers register classes instruction set clock cycles per instruction

Page 63: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Other Courses

L11, 2009-12-02

63

ID1218, Christian Schulte

Page 64: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Other Courses

Semantics for Programming Languages DD2454, Dilian Gurov, CSC

Concurrent Programming ID1217, Vlad Vlassov, ICT

Compilers And Execution Environments ID2202, Christian Schulte, ICT

Distributed Programming ID2201, Johan Montelius, ICT

with two follow-up courses

L11, 2009-12-02ID1218, Christian Schulte

64

Page 65: PROGRAMMING PARADIGMS AND LANGUAGES ID1218 Lecture 112009-12-02 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

Other Courses

Logic Programming ID2213, Thomas Sjöland, ICT

Constraint Programming ID2204, Christian Schulte, ICT

System Modeling And Simulation IV1200, Rassul Ayani, ICT

L11, 2009-12-02ID1218, Christian Schulte

65


Recommended