Multilisp Concurrent Functional Programming Ed Walters and Tim

  • Slides: 34
Download presentation
Multilisp: Concurrent Functional Programming Ed Walters and Tim Richards University of Massachusetts Amherst UNIVERSITY

Multilisp: Concurrent Functional Programming Ed Walters and Tim Richards University of Massachusetts Amherst UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now?

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 2

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now?

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 3

What is Multilisp? Dialect of Scheme language Extensions for Concurrency Functional Programming Limited Side-effects

What is Multilisp? Dialect of Scheme language Extensions for Concurrency Functional Programming Limited Side-effects Garbage Collection Parallel Function Application Futures Reference: R. Halstead, TOPLAS, Vol. 7, No. 4, 1985. UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 4

Goal of Multilisp Explicit Constructs for Concurrency Adhere to Scheme Philosophy No Additional Syntax

Goal of Multilisp Explicit Constructs for Concurrency Adhere to Scheme Philosophy No Additional Syntax Minimal Additional Semantics Maximum Flexibility Granularity Backwards-compatibility� UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 5

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now?

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 6

The Scheme Language Descendent of Lisp (LISt Processing) Created by Steele and Sussman (1975)

The Scheme Language Descendent of Lisp (LISt Processing) Created by Steele and Sussman (1975) Important Features: Extended Lambda Calculus Lexical Scoping Functions are first-class UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 7

Important Terms Expression: Basic unit of Scheme code (e. g. , List or integer)

Important Terms Expression: Basic unit of Scheme code (e. g. , List or integer) Evaluation: Scheme expressions evaluate to a value upon execution Application: Function call on a list, i. e. apply first element to rest of list (f a b c) => f(a, b, c) UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 8

Brief Scheme Syntax Function definition Function application (f x) Conditionals (define f (lambda (x)

Brief Scheme Syntax Function definition Function application (f x) Conditionals (define f (lambda (x) … )) (if x y z) Symbols and Atomic Elements ‘x, 3 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 9

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (=

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (fib (- x 1)) (fib (- x 2))))))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 10

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (=

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (fib (- x 1)) (fib (- x 2))))))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 11

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (=

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (fib (- x 1)) (fib (- x 2))))))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 12

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (=

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (fib (- x 1)) (fib (- x 2))))))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 13

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (=

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (fib (- x 1)) (fib (- x 2))))))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 14

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (=

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (fib (- x 1)) (fib (- x 2))))))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 15

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (=

Scheme Example: Fib (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (fib (- x 1)) (fib (- x 2))))))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 16

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now?

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 17

Parallel Calls pcall: Parallel function application Syntax: (pcall F A B C) Semantics: Evaluate

Parallel Calls pcall: Parallel function application Syntax: (pcall F A B C) Semantics: Evaluate F, A, B, C in parallel Apply F to A, B, C (F A B C) UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 18

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq (- x 1)) (div-and-conq (- x 5)))))) UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 19

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq (- x 1)) (div-and-conq (- x 5)))))) UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 20

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq (- x 1)) (div-and-conq (- x 5)))))) UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 21

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq (- x 1)) (div-and-conq (- x 5)))))) UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 22

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq

Parallel Calls: Example (define div-and-conq (lambda (x) (if (base-case x) x (pcall combine-results (div-and-conq (- x 1)) (div-and-conq (- x 5)))))) UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 23

Futures future: contract to deliver parallel computation Syntax: (future <exp>) Semantics: Evaluate <exp> concurrently

Futures future: contract to deliver parallel computation Syntax: (future <exp>) Semantics: Evaluate <exp> concurrently with calling program Return reference to future immediately Block if value of <exp> is required UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 24

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (future (fib (- x 1))) (future (fib (- x 2)))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 25

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (future (fib (- x 1))) (future (fib (- x 2)))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 26

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (future (fib (- x 1))) (future (fib (- x 2)))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 27

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (future (fib (- x 1))) (future (fib (- x 2)))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 28

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x

Futures: Example (define fib (lambda (x) (if (= x 1) 1 (if (= x 2) 2 (+ (future (fib (- x 1))) (future (fib (- x 2)))) (fib 10) => 89 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 29

More Details pcall can be implemented using future Facilitates multiple concurrent programming paradigms: Cilk-style

More Details pcall can be implemented using future Facilitates multiple concurrent programming paradigms: Cilk-style Message Passing Futures somewhat resemble Lazy Evaluation delayed but guaranteed No infinite data structures UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 30

Implementation Notes Each future/pcall element is a thread pcall fork/join parallelism future asynchronous thread

Implementation Notes Each future/pcall element is a thread pcall fork/join parallelism future asynchronous thread block on read UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 31

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now?

Overview What is Multilisp? Overview of Scheme Features of Multilisp Where is Multilisp Now? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 32

Where is Multilisp Now? No current Scheme compilers implement futures We had to implement

Where is Multilisp Now? No current Scheme compilers implement futures We had to implement our own interpreter! However: THEY LIVE on in Java! Transparent Proxies for Java Futures, Pratikakis, Spacco, and Hicks, OOPSLA 2004. Safe Futures for Java, Welc, Jagannathan, and Hosking, OOPSLA 2005. UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 33

Conclusion Like much of the Scheme World: Elegant, Flexible Solution Deader than a Doornail

Conclusion Like much of the Scheme World: Elegant, Flexible Solution Deader than a Doornail Not Java UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 34