Top Banner
π
48

A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello [email protected]

Jun 13, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

A π-Calculus Internal Domain-Speci�c

Language for Scala

Pedro Matiello

[email protected]

Ana C. V. de Melo

[email protected]

Page 2: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

π-Calculus � Syntax

Pre�xes α ::= y x Output

y(x) Input

τ Silent

Agents P ::= 0 Nil

α.P Pre�x

P + P Sum

P |P Parallel

(νx)P Restriction

[x = y ].P Match

[x 6= y ].P Mismatch

De�nitions A(x1, ..., xn)def= P

Page 3: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

π-Calculus � Syntax

Pre�xes α ::= y x Output

y(x) Input

τ Silent

Agents P ::= 0 Nil

α.P Pre�x

P + P Sum

P |P Parallel

(νx)P Restriction

[x = y ].P Match

[x 6= y ].P Mismatch

De�nitions A(x1, ..., xn)def= P

Page 4: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

π-Calculus � Syntax

Pre�xes α ::= y x Output

y(x) Input

τ Silent

Agents P ::= 0 Nil

α.P Pre�x

P + P Sum

P |P Parallel

(νx)P Restriction

[x = y ].P Match

[x 6= y ].P Mismatch

De�nitions A(x1, ..., xn)def= P

Page 5: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

π-Calculus � Transition Rules

Pre�xα.P

α−→P

Restriction Pα−→P ′,x 6∈α

(νx).Pα−→(νx).P ′

Match α.Pα−→P

[x=x].Pα−→P

Mismatch α.Pα−→P,x 6=y

[x 6=y ].Pα−→P

Page 6: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

π-Calculus � Transition Rules

ParallelP

α−→P ′,bn(α)∩fn(Q)=∅P|Q

α−→P ′|Q

Communication Pα(x)−→P ′,Q

αu−→Q ′

P|Qα−→P ′{u/x}|Q ′

Summation Pα−→P ′

P+Qα−→P ′

Page 7: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Scala � Variables and Methods

val string:String = "Not reassignable"

var string:String = "Reassignable"

def max(x:Int , y:Int):Int = {

if (x > y) x else y

}

Page 8: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Scala � Type Inference

val string = "Not reassignable"

var string = "Reassignable"

def max(x:Int , y:Int) = {

if (x > y) x else y

}

Page 9: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Scala � Classes and Traits

trait Person {

def sleep { Thread sleep 1000 }

def talk:Unit

}

class NicePerson extends Person {

def talk { println (" Hello") }

}

Page 10: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Scala � Objects

object Pineapple {

def eat { println (" tasty") }

}

scala > Pineapple.eat

tasty!

Page 11: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Scala � Case Classes and Pattern Matching

trait Human

case class Man(name:String) extends Human

case class Woman(name:String) extends Human

def whoIs(human:Human) {

human match {

case Man(name) => println ("He is "+name)

case Woman(name) => println ("She is "+name)

}

}

scala > whoIs(Man("Joe Doe"))

He is Joe Doe

Page 12: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Scala � Implicit Conversions

implicit def Int2String(int:Int) = int.toString

def len(str:String) = str.size

scala > len (1234)

res0: Int = 4

Page 13: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � API

Agent de�nition:

val P = Agent (...)

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

val restrP = Agent {

val restrictedName = Name (...)

...

}

def argP(arg1:Type1 , ..., argN:TypeN):Agent =

Agent { ... }

Page 14: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � API

Names:

val name = Name(some_object)

val name = Name[Type]

name := other_object

value = name.value

Page 15: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � API

Links:

val link = Link[Type]

link~name

link(another_name)

Silent Transitions:

val silent = Action{ doSomething () }

Page 16: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � API

Pre�x Concatenation:

val P = Agent { p1 * p2 * Q }

Matching:

val P = Agent(If (condition) {Q})

Page 17: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � API

Agent Composition:

val P = Agent { Q1 | Q2 | Q3 }

Summation:

val P = Agent {

(p1 :: Q1) + (p2 :: Q2) + (p3 :: Q3)

}

Page 18: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

π-Calculus � Example

The agents:

C = (νp)(νx)a(p).px

P = (νy)b(y).τ.P

S = ab.S

The composition:

C |P |S

C P

S

ab

Page 19: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Example

object Printserver {

def main (args:Array[String ]) {

val a = Link[Link[String ]]

val b = Link[String]

}

}

Page 20: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Example

object Printserver {def main (args:Array[String ]) {

val a = Link[Link[String ]]val b = Link[String]

val C = Agent {

val p = Name[Link[String ]]

a(p) * p~" message"

}

}}

Page 21: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Example

object Printserver {def main (args:Array[String ]) {

val a = Link[Link[String ]]val b = Link[String]

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

}

lazy val S:Agent = Agent {

a~b*S

}

}}

Page 22: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Example

object Printserver {def main (args:Array[String ]) {

val a = Link[Link[String ]]val b = Link[String]

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

}

lazy val S:Agent = Agent {a~b*S

}

lazy val P:Agent = Agent {

val msg = Name[String]

val act = Action { println(msg.value) }

b(msg) * act * P

}

}}

Page 23: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Example

object Printserver {def main (args:Array[String ]) {

val a = Link[Link[String ]]val b = Link[String]

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

}

lazy val S:Agent = Agent {a~b*S

}

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

}

new ThreadedRunner(C | S | P) start

}}

Page 24: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Message Passing

Channels are bu�ers

Communication is synchronous

Output y x

Wait until y is empty

Put x on y

Signal y not empty

Wait until y is empty

Input y(x)

Wait until y is not empty

Put the contents of y in x

Signal y empty

Page 25: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Message Passing

Channels are bu�ers

Communication is synchronous

Output y x

Wait until y is empty

Put x on y

Signal y not empty

Wait until y is empty

Input y(x)

Wait until y is not empty

Put the contents of y in x

Signal y empty

Page 26: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Message Passing

Channels are bu�ers

Communication is synchronous

Output y x

Wait until y is empty

Put x on y

Signal y not empty

Wait until y is empty

Input y(x)

Wait until y is not empty

Put the contents of y in x

Signal y empty

Page 27: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Type Hierarchy

PiObject

Prefix Agent

Concatenation Composition Summation

SummationAgent

Guard

ActionPrefix ConcatenationPrefix LinkPrefix

ConcatenationAgent GuardedAgent CompositionAgent MatchAgent NilAgent RestrictedAgent

Page 28: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Data Structure

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

Page 29: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Data Structure

Agent ( p1 * p2 * p3 * Q )

P

ConcatenationAgent

ConcatenationPrefix Q

ConcatenationPrefix p3

p1 p2

Page 30: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Execution

private def execute(agent:PiObject) {

agent match {

case Type1(*args) => ...

case Type2(*args) => ...

...

}

Page 31: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Executing Pre�x Sequences

private def execute(expr:PiObject) {

expr match {

...

case ConcatenationPrefix(left , right) =>

execute(left apply)

execute(right apply)

case ConcatenationAgent(left , right) =>

execute(left)

execute(right)

...

}

}

Page 32: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Executing Pre�x Sequences

Agent ( p1 * p2 * p3 * Q )

P

ConcatenationAgent

ConcatenationPrefix Q

ConcatenationPrefix p3

p1 p2

Page 33: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Executing Pre�x Sequences

Agent ( p1 * p2 * p3 * Q )

P

ConcatenationAgent

ConcatenationPrefix Q

ConcatenationPrefix p3

p1 p2

Page 34: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Executing Pre�x Sequences

Agent ( p1 * p2 * p3 * Q )

P

ConcatenationAgent

ConcatenationPrefix Q

ConcatenationPrefix p3

p1 p2

Page 35: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Executing Pre�x Sequences

Agent ( p1 * p2 * p3 * Q )

P

ConcatenationAgent

ConcatenationPrefix Q

ConcatenationPrefix p3

p1 p2

Page 36: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Executing Pre�x Sequences

Agent ( p1 * p2 * p3 * Q )

P

ConcatenationAgent

ConcatenationPrefix Q

ConcatenationPrefix p3

p1 p2

Page 37: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Executing Agent Compositions

private def execute(agent:PiObject) {

agent match {

...

case CompositionAgent(left , right) =>

executeInNewThread(left apply)

executeInNewThread(right apply)

...

}

}

Page 38: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Spawning Agents

private def executeInNewThread(agent:PiObject) {

val runnable = new Runnable () {

override def run() { execute(agent) }

}

new Thread(runnable) start

}

23743ms to spawn 100,000 agents.

Page 39: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Spawning Agents

private def executeInNewThread(agent:PiObject) {

val runnable = new Runnable () {

override def run() { execute(agent) }

}

new Thread(runnable) start

}

23743ms to spawn 100,000 agents.

Page 40: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Spawning Agents

private def executeInNewThread(agent:PiObject) {

val runnable = new Runnable () {

override def run() { execute(agent) }

}

executor.execute(runnable)

}

2089ms to spawn 100,000 agents.

Page 41: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Spawning Agents

private def executeInNewThread(agent:PiObject) {

val runnable = new Runnable () {

override def run() { execute(agent) }

}

executor.execute(runnable)

}

2089ms to spawn 100,000 agents.

Page 42: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

CachedThreadPool

Caches �nished threads

Reuses cached threads

Creates new threads if none are available

Deletes from the pool threads that have not been reused for

60 seconds

Spawning threads is expensive!

Page 43: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

CachedThreadPool

Caches �nished threads

Reuses cached threads

Creates new threads if none are available

Deletes from the pool threads that have not been reused for

60 seconds

Spawning threads is expensive!

Page 44: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Termination

private def executeInNewThread(agent:PiObject) {

val runnable = new Runnable () {

override def run() {

execute(agent)

}

}

executor.execute(runnable)

}

Page 45: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Termination

private def executeInNewThread(agent:PiObject) {

increaseThreadCount ()

val runnable = new Runnable () {

override def run() {

execute(agent)

decreaseThreadCount ()

}

}

executor.execute(runnable)

}

Page 46: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Termination

private def increaseThreadCount () {

synchronized {

threadCount += 1

notify

}

}

private def decreaseThreadCount () {

synchronized {

threadCount -= 1

notify

}

}

Page 47: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Termination

private def increaseThreadCount () {

synchronized {

threadCount += 1

notify

}

}

private def decreaseThreadCount () {

synchronized {

threadCount -= 1

notify

}

}

Page 48: A -Calculus Internal Domain-Specific Language for Scalacef/mac499-10/monografias/pedromatiello/... · A ˇ-Calculus Internal Domain-Speci c Language for Scala Pedro Matiello pmatiello@gmail.com

Pistache � Termination

private def waitAllThreads () {

synchronized {

while (threadCount != 0) wait;

}

}