Pistache: A π-Calculus Internal Domain Specific Language for Scala

44
PISTACHE A π-Calculus Internal Domain Specific Language for Scala

description

Presented at: XIV Simpósio Brasileiro de Métodos Formais (SBMF 2011), September/2011.

Transcript of Pistache: A π-Calculus Internal Domain Specific Language for Scala

Page 1: Pistache: A π-Calculus Internal Domain Specific Language for Scala

PISTACHEA π-Calculus Internal Domain Specific Language for Scala

Page 3: Pistache: A π-Calculus Internal Domain Specific Language for Scala

• Pistache is an implementation of the π-Calculus as a domain specific language hosted in Scala

INTRODUCTION

Page 4: Pistache: A π-Calculus Internal Domain Specific Language for Scala

• It provides π-Calculus’ abstractions for concurrent computation within the Scala programming language

INTRODUCTION

Page 5: Pistache: A π-Calculus Internal Domain Specific Language for Scala

π-CALCULUS

Page 6: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•π-Calculus is a formal language for describing concurrent computation with dynamic reconfiguration

Page 7: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•Agents communicate by exchanging names through channels (which are also names)

•Connections between agents may change in the course of the computation

Page 8: Pistache: A π-Calculus Internal Domain Specific Language for Scala

AGENTS

0 Nil

α.P Prefix

P + Q Sum

P|Q Parallel

(νx)P Restriction

[x=y].P Match

[x≠y].P Mismatch

Page 9: Pistache: A π-Calculus Internal Domain Specific Language for Scala

PREFIXES

yx Output

y(x) Input

τ Silent

_

Page 10: Pistache: A π-Calculus Internal Domain Specific Language for Scala

• The Agents:C = (νz) y(p).pzS = yx.SP = x(w).α.P

• The composition:C | S | P

&

6

3

\ [

__

EXAMPLE

Example adapted from: An Introduction to the pi-Calculus, by Joachim Parrow

Page 11: Pistache: A π-Calculus Internal Domain Specific Language for Scala

SCALA

Page 12: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•Scala is a general-purpose programming language providing features both of object-oriented and functional programming

Page 13: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•Flexible syntax

•Statically-typed

•Runs on the Java Virtual Machine

Page 14: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•Actively-developed

•Growing community

Page 15: Pistache: A π-Calculus Internal Domain Specific Language for Scala

PISTACHE

Page 16: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•Pistache is an implementation of π-Calculus as an internal Domain Specific Language for Scala

Page 17: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val P = Agent(...)

lazy val recP:Agent = Agent(...)

val restrP = Agent { val restrictedName = Name(...) ...}

AGENT DEFINITION

Page 18: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val name = Name(some_object)

val name = Name[Type]

name := other_object

value = name.value

NAMES

Page 19: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val y = Link[Type]

y~x yx

y(x) y(x)

CHANNELS

_

Page 20: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val silent = Action{ doSomething() } τ

SILENT TRANSITIONS

Page 21: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val P = Agent { p1 * p2 * Q } P = α.β.Q

CONCATENATION

Page 22: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val P = Agent { Q | R | S } P = Q | R | S

COMPOSITION

Page 23: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val P = Agent { (p1 :: Q) + (p2 :: R) + (p3 :: S) P = αQ + βR + γS

}

SUMMATION

Page 24: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val P = Agent(If (x==y) {Q}) P = [x=y] Q

MATCHING

Page 25: Pistache: A π-Calculus Internal Domain Specific Language for Scala

• The Agents:C = (νz) y(p).pzS = yx.SP = x(w).α.P

• The composition:C | S | P

&

6

3

\ [

__

EXAMPLE

Page 26: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val y = Link[Link[String]]val x = Link[String]

EXAMPLE

Page 27: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val y = Link[Link[String]]val x = Link[String]

val C = Agent { val p = Name[Link[String]] val z = "message" y(p) * p~z}

EXAMPLE

C = (νz) y(p).pz_

Page 28: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val y = Link[Link[String]]val x = Link[String]

val C = Agent { val p = Name[Link[String]] y(p) * p~"message"}

lazy val S:Agent = Agent { y~x*S }

EXAMPLE

S = yx.S_

Page 29: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val y = Link[Link[String]]val x = Link[String]

val C = Agent { val p = Name[Link[String]] y(p) * p~"message"}

lazy val S:Agent = Agent { y~x*S }

lazy val P:Agent = Agent { val w = Name[String] val act = Action { println(msg.value) } x(w) * act * P}

EXAMPLE

P = x(w).α.P

Page 30: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val y = Link[Link[String]]val x = Link[String]

val C = Agent { val p = Name[Link[String]] y(p) * p~"message"}

lazy val S:Agent = Agent { y~x*S }

lazy val P:Agent = Agent { val msg = Name[String] val act = Action { println(msg.value) } x(msg) * act * P}

new ThreadedRunner(C | S | P) start

EXAMPLE

C | S | P

Page 31: Pistache: A π-Calculus Internal Domain Specific Language for Scala

MESSAGE PASSING

• Channels are implemented as shared buffers

• Communication between agents is synchronous

Page 32: Pistache: A π-Calculus Internal Domain Specific Language for Scala

MESSAGE PASSING

Output yx Input y(x)

Wait until y is empty Wait until y is not empty

Put x on y Put the contents of y in x

Signal y not empty Signal y empty

Wait until y is empty

_

Page 33: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val P = Agent ( p1 * p2 * p3 * Q )

DATA STRUCTURE

Page 34: Pistache: A π-Calculus Internal Domain Specific Language for Scala

val P = Agent ( p1 * p2 * p3 * Q )

DATA STRUCTURE

3

S�

&RQFDWHQDWLRQ$JHQW

&RQFDWHQDWLRQ3UHIL[

&RQFDWHQDWLRQ3UHIL[

4

S�S�

Page 35: Pistache: A π-Calculus Internal Domain Specific Language for Scala

def execute(agent:PiObject) { agent match { case ConcatenationAgent(left, right) => ... case CompositionAgent(left, right) => ... ... }}

EXECUTION

Page 36: Pistache: A π-Calculus Internal Domain Specific Language for Scala

case ConcatenationAgent(left, right) => execute(left apply) execute(right apply)

EXECUTION

Page 37: Pistache: A π-Calculus Internal Domain Specific Language for Scala

case CompositionAgent(left, right) => executeInNewThread(left apply) executeInNewThread(right apply)

EXECUTION

Page 38: Pistache: A π-Calculus Internal Domain Specific Language for Scala

def executeInNewThread(agent:PiObject) {

val runnable = new Runnable() { override def run() { execute(agent) } }

executor.execute(runnable)}

THREAD SPAWNING

Page 39: Pistache: A π-Calculus Internal Domain Specific Language for Scala

THREAD SPAWNING

• CachedThreadPool

• Caches finished threads

• Reuses cached threads

• Creates new threads if none are available

•Deletes from the pool threads that have not been used reused for 60 seconds

Page 40: Pistache: A π-Calculus Internal Domain Specific Language for Scala

THREAD SPAWNING

Strategy Time consumed for 100k agents

new Thread 23 743 ms

CachedThreadPool 2 089 ms

Page 41: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•We knew that:

• Concurrent programming is hard

CONCLUSION

Page 42: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•We learned that:

• Proper abstractions can improve our understanding of concurrency and concurrent programs

CONCLUSION

Page 43: Pistache: A π-Calculus Internal Domain Specific Language for Scala

•We also learned that:

• The abstractions present in π-Calculus provide a feasible model for concurrency in actual software programming

CONCLUSION

Page 44: Pistache: A π-Calculus Internal Domain Specific Language for Scala

PISTACHEPedro Matiello

Ana Cristina de Melo