CS 312 – Lecture 28

17
1 CS 312 – Lecture 28 • Continuations – Probably the most confusing thing you’ve seen all semester… • Course summary – Life after CS 312

description

CS 312 – Lecture 28. Continuations Probably the most confusing thing you’ve seen all semester… Course summary Life after CS 312. Continuations. fn(z:bool) => if z then ~x else x. fn(a: int)=>a. fn(a: int)=>~a. SML/NJ has ability to capture a control context as a value: a continuation - PowerPoint PPT Presentation

Transcript of CS 312 – Lecture 28

Page 1: CS 312 – Lecture 28

1

CS 312 – Lecture 28• Continuations

– Probably the most confusing thing you’ve seen all semester…

• Course summary– Life after CS 312

Page 2: CS 312 – Lecture 28

2

Continuations• SML/NJ has ability to capture a

control context as a value: a continuation

• Continuation = “the rest of the program”

• Example: if x<0 then ~x else x

fn(z:bool) => if z then ~x else x

fn(a: int)=>afn(a: int)=>~a

Page 3: CS 312 – Lecture 28

3

Continuations• SML/NJ has ability to capture a control

context as a value: a continuation• Continuation = “the rest of the

program”• Example:

if x<0 then ~x else x

• So we can rewrite the above code as(fn(z:bool) => if z then ~x else x) (x < 0)

fn(z:bool) => if z then ~x else x

Page 4: CS 312 – Lecture 28

4

Continuations in ML• In CPS, functions don’t return – they

just pass their value to another function.

• Open SMLofNJ.Cont:‘a cont is a continuation expecting a value

of type ‘athrow: ‘a cont -> ‘a -> ‘b throws

control to continuation, never comes backthrow c v means: “You are c. Here is value

v for you, take it and take the control flow too; I’ve done my job and I will disappear, so don’t come back to me with your result.”

Page 5: CS 312 – Lecture 28

5

Continuations in MLcallcc : (‘a cont->`a)->`acallcc f invokes f passing it the current

continuationcallcc f means: “I will now pass control to

f, so that f can perform some computation." • throw = sending a value to a continuation• callcc = sending a continuation to a function

When f is done, it will send something of type `a to the continuation it received.

• directly, using a throw, or indirectly, with another callcc

So, the continuation must have type `a cont and f will have type (`a cont -> `a). In the end, it will be as though the callcc f had returned `a.

Page 6: CS 312 – Lecture 28

6

Exampleif (x < 0) then ~x else x

One way to write it in Continuation Passing Style:

let

fun f (x: int) (c: int cont): int = throw c (~x)

fun g (x: int) (c: int cont): int = throw c (x)

fun t (y: bool*int as (z, x)) (c: int cont): int = if z then callcc (f x) else callcc (g x)

fun h (x: int) (c: int cont): int =

callcc ( t ((x<0), x))

in

callcc (h ~10 )

end

Page 7: CS 312 – Lecture 28

7

Handling errors• Can be used in place of exceptions to send

control to an arbitrary place let fun g(n: real) (errors: int option cont) : int

option = if n < 0.0 then throw errors NONE else SOME(Real.trunc(Math.sqrt(n))) fun f (x:int) (y:int) (errors: int option cont):

int option = if y = 0 then throw errors NONE else SOME(x div y+valOf(g 10.0 errors)) in case callcc(f 13 3) of NONE => "runtime error" | SOME(z) => "Answer is "^Int.toString(z) end

Page 8: CS 312 – Lecture 28

8

First-class continuations• Can store continuations for future

use! let val cref: int cont option ref = ref NONE

fun f(c: int cont): int = (cref := SOME(c); 5)

in callcc f; case !cref of NONE => "finished" | SOME(co) => throw co 4 end

Page 9: CS 312 – Lecture 28

9

Continuations - summary• Control context is encoded as a value

and passed around in the program• Can be used to transfer control flow

to arbitrary points in the program– related feature 1: gotos in low-level code– related feature 2: setjmp/longjmp in C– useful for exceptions– useful in compilers and interpreters

• "You need to learn continuations about three times before they really start making sense."

Page 10: CS 312 – Lecture 28

10

What happened in CS 312?• Design and specification of programs

– modules and interfaces– documenting functions and ADTs– programming in functional style– testing

• Data structures and algorithms– collections– graphs– showing correctness and complexity

• Programming languages– Features and methodologies– models of evaluation– implementation

Page 11: CS 312 – Lecture 28

11

Life after SML

• 312 is not about SML or even about functional programming

• Lessons apply to Java, C, C++, etc.

Page 12: CS 312 – Lecture 28

12

Design• Break up your program into modules

with clearly defined interfaces (signatures)

• Use abstract data types (data abstractions)

• Good interfaces are narrow, implementable, but adequate

• Avoid stateful abstractions, imperative operations unless compelling justification

• Testing strategy and test cases: coverage

Page 13: CS 312 – Lecture 28

13

Specification• Good specifications: clear, simple,

concise, accurate• Think about your audience• Avoid over-specification• Abstraction barrier: user should not

need to know implementation/representation

• Convince someone that every spec is met

• Specify representation invariants and abstraction functions

Page 14: CS 312 – Lecture 28

14

Data structures and algorithms

• Collections (ordered and unordered)– Sets, maps– Lists, arrays– Hash tables– Binary search trees (red-black, splay, B-

trees)– Priority queues/heaps

• Graphs– BFS, DFS, Dijkstra

• CS 482 and 472

Page 15: CS 312 – Lecture 28

15

Data structures and algorithms

• String and regular-expression matching – CS 381/481

• Mutable vs. immutable data structures

• Locality– Everywhere (theoretical and applied

courses)

Page 16: CS 312 – Lecture 28

16

Correctness and complexity

• Using specifications, invariants to reason about correctness

• Constructing, solving recurrence relations

• Worst-case run time, average case run time, amortized run time

• Proofs by induction• CS 482

Page 17: CS 312 – Lecture 28

17

Programming languages• Features

– Higher-order functions– Explicit refs– Recursive types and functions – Lazy vs. eager evaluation– Concurrency

• Evaluation models (semantics)– Substitution– Environments and closures

• Implementation– Type checking and type inference– Memory management, garbage collection

• CS 411, 412