Multilisp Concurrent Functional Programming Ed Walters and Tim


































- Slides: 34

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? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 2

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 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 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? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 6

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) 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) … )) (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 (= 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 (= 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 (= 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 (= 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 (= 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 (= 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 (= 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? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 17

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 (- 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 (- 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 (- 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 (- 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 (- 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 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 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 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 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 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 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 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 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? UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 32

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 Not Java UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 34