Designing a Concurrent Programming...

114
Motivation Language Design Concurrent Programming Language Conclusion Designing a Concurrent Programming Language Sven Stork February 5, 2009 1 / 60 Designing a Concurrent Programming Language

Transcript of Designing a Concurrent Programming...

Page 1: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Designing a Concurrent Programming Language

Sven Stork

February 5, 2009

1 / 60

Designing a Concurrent Programming Language

Page 2: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Outline

1 Motivation

2 Language DesignSyntaxOperational SemanticsStatic Semantics

3 Concurrent Programming LanguagePetri NetworksDataflow ArchitecturesCurrent Research Directions

4 ConclusionRelevanceCurrent StateMore Information

2 / 60

Designing a Concurrent Programming Language

Page 3: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Motivation

3 / 60

Designing a Concurrent Programming Language

Page 4: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Motivation

Why are we looking into concurrent programming ?

concurrent programming is the future (no choice)

parallel programming was not mainstream in the last decades

there is no (good) support for parallel programming in currentprogramming languagesonly in domain specific areas (e.g HPC) research for parallelprogrammingconcepts and approaches of domain specific areas are most of thetime no suitable for general purpose programming

glimpse at the future

”HPC systems are about 20 year ahead of mainstreamsystems”

4 / 60

Designing a Concurrent Programming Language

Page 5: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Motivation

http://www.top500.org

5 / 60

Designing a Concurrent Programming Language

Page 6: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Motivation

http://www.top500.org

6 / 60

Designing a Concurrent Programming Language

Page 7: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Motivation

http://www.top500.org

7 / 60

Designing a Concurrent Programming Language

Page 8: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Motivation

What we are looking for ?

How to write concurrent applications for large-scaleconcurrent systems ?

concurrency should be implicit

describing what to do versus how to do itno dealing with low level primitives (e.g. threads, locks, . . . )no reasoning about possible execution pathsno thinking about concrete data distribution

the runtime should be in charge for optimal execution anddistribution

8 / 60

Designing a Concurrent Programming Language

Page 9: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Language Design

9 / 60

Designing a Concurrent Programming Language

Page 10: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Language Design

Terminology/Concepts

Syntax

Semantics

Operational SemanticsStatic Semantics

Inference Rules

Grammer

10 / 60

Designing a Concurrent Programming Language

Page 11: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Syntax

Syntax

”Notation”only specifies legal language constructs and not meaning (→operational semantics)

What’s the meaning of : a = 1

ASSIGNMENT : store 1 in aCOMPARISON : is a equals to 1SHIFT : shift a by one bitADDITION : add 1 to a. . .

Syntax is in general defined by specific grammar (e.g BNF)

11 / 60

Designing a Concurrent Programming Language

Page 12: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Syntax/Grammar

Example

e ::= n | tt | ff | if e then e else e

e expression

n natural number

tt true value

ff false value

if . . . conditional

12 / 60

Designing a Concurrent Programming Language

Page 13: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Inference Rules

Definition

Inference RuleJ1, . . . , Jn

J

If J1, . . . , Jn are derivable the J is derivable.

Example

Monitor Mouse KeyboardMainboard CPU MemoryHarddrive DVD−Drive Power−Supply

Computer

13 / 60

Designing a Concurrent Programming Language

Page 14: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Operational Semantics

Arithmetic

e ::= n | e + e

(1+2+3) → ???

What does this mean ?

In which order are the operations executed ?

What is the result ?

14 / 60

Designing a Concurrent Programming Language

Page 15: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Big-Step Semantics

Example

e ::= n | e + e1 + 2 + 3

Big-Step Semantics

Big-Step Semantics describe the evaluation of an wholeexpression.

Notation e ⇓ n

Example 1 + 2 + 3 ⇓ 6

15 / 60

Designing a Concurrent Programming Language

Page 16: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Small-Step Semantics

Example

e ::= n | e + e1 + 2 + 3

Small-Step Semantics

Small-Step Semantics = ”Model of Computation” describeexactly in which order which operation are performed (state →state).

Notation e 7→ e′ (e 7→∗ e′′ KleeneStar , 0− nsteps)

Example 1 + 2 + 3 7→ 3 + 3

16 / 60

Designing a Concurrent Programming Language

Page 17: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Small-Step Semantics

Example

e ::= n | e + e1 + 2 + 3

Small-Step Semantics for Arithmetic

e1 7→ e ′1e1 + e2 7→ e ′1 + e2

v1 value e2 7→ e ′2v1 + e2︸ ︷︷ ︸

compatibility rules

m + n 7→ m + n︸ ︷︷ ︸′′reduction′′ rule

17 / 60

Designing a Concurrent Programming Language

Page 18: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Small-Step Semantics

Example

1 value 2 value

1 + 2 7→

3 value

3 value

1 + 2 + 3 7→∗

6 value

18 / 60

Designing a Concurrent Programming Language

Page 19: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Small-Step Semantics

Example

1 value 2 value

1 + 2 7→

3 value

3 value1 + 2 + 3 7→∗

6 value

18 / 60

Designing a Concurrent Programming Language

Page 20: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Small-Step Semantics

Example

1 value 2 value1 + 2 7→

3 value

3 value1 + 2 + 3 7→∗

6 value

18 / 60

Designing a Concurrent Programming Language

Page 21: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Small-Step Semantics

Example

1 value 2 value1 + 2 7→ 3 value 3 value

1 + 2 + 3 7→∗

6 value

18 / 60

Designing a Concurrent Programming Language

Page 22: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Small-Step Semantics

Example

1 value 2 value1 + 2 7→ 3 value 3 value

1 + 2 + 3 7→∗ 6 value

18 / 60

Designing a Concurrent Programming Language

Page 23: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Static Semantics

What is the result of : 1+2+”H” ?

to ”12H”

to 75

error

We don’t know! We didn’t provide a syntax nor operationalsemantics.

19 / 60

Designing a Concurrent Programming Language

Page 24: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Static Semantics

What is the result of : 1+2+”H” ?

to ”12H”

to 75

error

We don’t know! We didn’t provide a syntax nor operationalsemantics.

19 / 60

Designing a Concurrent Programming Language

Page 25: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Arithmetic Language

e ::= n | e + e

e1 7→ e ′1e1 + e2 7→ e ′1 + e2

v1 value e1 7→ e ′2v1 + e2︸ ︷︷ ︸

compatibility rules

m + n 7→ m + n︸ ︷︷ ︸′′reduction′′ rule

Now he know that 1+2+”H” is not defined in our language.

But when to we discover the error ?

After we executed 1+2 and try to execute 3+”H”So far we have no way of verifying that the specified program iscorrect (except parser checking).This might after the program executed for a long time

20 / 60

Designing a Concurrent Programming Language

Page 26: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Arithmetic Language

e ::= n | e + e

e1 7→ e ′1e1 + e2 7→ e ′1 + e2

v1 value e1 7→ e ′2v1 + e2︸ ︷︷ ︸

compatibility rules

m + n 7→ m + n︸ ︷︷ ︸′′reduction′′ rule

Now he know that 1+2+”H” is not defined in our language.

But when to we discover the error ?

After we executed 1+2 and try to execute 3+”H”So far we have no way of verifying that the specified program iscorrect (except parser checking).This might after the program executed for a long time

20 / 60

Designing a Concurrent Programming Language

Page 27: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Types

To verify that the program doesn’t run into undefined expressionsuse types

Types classify terms and allow static checking of programs

Notation e : τ

Definition Stuck

A term e is stuck if e is not a value and e does not take a step.

21 / 60

Designing a Concurrent Programming Language

Page 28: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Theorem: Type Safety

If e : τ and e 7→∗ e ′ then e ′ is not stuck.

Intuition

If you start with a well types term/program you will never run intosituations where the systems doesn’t know what to do (got stuck).

22 / 60

Designing a Concurrent Programming Language

Page 29: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Lemma: Progress

If e : τ then either e value or e takes a step.

Lemma: Type Preservation

If e : τ and e 7→ e ′ then e ′ : τ .

23 / 60

Designing a Concurrent Programming Language

Page 30: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Theorem: Type Safety

If e : τ and e 7→∗ e ′ then e ′ is not stuck.

Proof Type Safety

By induction of e 7→∗ e ′.

24 / 60

Designing a Concurrent Programming Language

Page 31: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Theorem: Type Safety

If e : τ and e 7→∗ e ′ then e ′ is not stuck.

Proof Type Safety

By induction of e 7→∗ e ′.

case[e1 7→ e ′1

] e = e1

e ′ = e ′1:

By progress e(= e ′) is not stuck.

Lemma: Progress

If e : τ then either e value or e takes a step.

24 / 60

Designing a Concurrent Programming Language

Page 32: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Theorem: Type Safety

If e : τ and e 7→∗ e ′ then e ′ is not stuck.

Proof Type Safety

By induction of e 7→∗ e ′.

case[e1 7→ e ′1

] e = e1

e ′ = e ′1:

By progress e(= e ′) is not stuck.

case

[e1 7→ e2 e2 7→∗ e3

e1 7→∗ e3

]e = e1

e ′ = e3:

By preservation e2 : τBy induction, e3 is not stuck.

Lemma: Type Preservation

If e : τ and e 7→ e ′ then e ′ : τ .

24 / 60

Designing a Concurrent Programming Language

Page 33: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Theorem: Type Safety

If e : τ and e 7→∗ e ′ then e ′ is not stuck.

Proof Type Safety

By induction of e 7→∗ e ′.

case[e1 7→ e ′1

] e = e1

e ′ = e ′1:

By progress e(= e ′) is not stuck.

case

[e1 7→ e2 e2 7→∗ e3

e1 7→∗ e3

]e = e1

e ′ = e3:

By preservation e2 : τBy induction, e3 is not stuck.

Type Safety Proof always the same → only prove Preservation andProgress.

24 / 60

Designing a Concurrent Programming Language

Page 34: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example

Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

e ::= n | e + e | tt | ff | if e then e else e | e < e

Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v value tt value ff value

e1 7→ e′1

e1 + e2 7→ e′1 + e2

v1 value e2 7→ e′2

v1 + e2 7→ v1 + e′2 m + n 7→ m + n

e1 7→ e′1

if e1 then e2 else e3 7→ if e′1 then e2 else e3

if tt then e2 else e3 7→ e2 if ff then e2 else e3 7→ e3

e1 7→ e′1

e1 < e2 7→ e′1 < e2

v1 value e2 7→ e′2

v1 < e2 7→ v1 < e′2

m < n

m < n 7→ tt

¬(m < n)

m < n 7→ ff

Static Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

τ ::= nat | bool

n : nat tt : bool ff : boole1 : nat e2 : nat

e1 + e2 : nat

e1 : nat e2 : nat

e1 < e2 : bool

e1 : bool e2 : τ e3 : τ

if e1 then e2 else e3 : τ

25 / 60

Designing a Concurrent Programming Language

Page 35: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example

Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

e ::= n | e + e | tt | ff | if e then e else e | e < e

Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v value tt value ff value

e1 7→ e′1

e1 + e2 7→ e′1 + e2

v1 value e2 7→ e′2

v1 + e2 7→ v1 + e′2 m + n 7→ m + n

e1 7→ e′1

if e1 then e2 else e3 7→ if e′1 then e2 else e3

if tt then e2 else e3 7→ e2 if ff then e2 else e3 7→ e3

e1 7→ e′1

e1 < e2 7→ e′1 < e2

v1 value e2 7→ e′2

v1 < e2 7→ v1 < e′2

m < n

m < n 7→ tt

¬(m < n)

m < n 7→ ff

Static Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

τ ::= nat | bool

n : nat tt : bool ff : boole1 : nat e2 : nat

e1 + e2 : nat

e1 : nat e2 : nat

e1 < e2 : bool

e1 : bool e2 : τ e3 : τ

if e1 then e2 else e3 : τ

25 / 60

Designing a Concurrent Programming Language

Page 36: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example

Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

e ::= n | e + e | tt | ff | if e then e else e | e < e

Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v value tt value ff value

e1 7→ e′1

e1 + e2 7→ e′1 + e2

v1 value e2 7→ e′2

v1 + e2 7→ v1 + e′2 m + n 7→ m + n

e1 7→ e′1

if e1 then e2 else e3 7→ if e′1 then e2 else e3

if tt then e2 else e3 7→ e2 if ff then e2 else e3 7→ e3

e1 7→ e′1

e1 < e2 7→ e′1 < e2

v1 value e2 7→ e′2

v1 < e2 7→ v1 < e′2

m < n

m < n 7→ tt

¬(m < n)

m < n 7→ ff

Static Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

τ ::= nat | bool

n : nat tt : bool ff : boole1 : nat e2 : nat

e1 + e2 : nat

e1 : nat e2 : nat

e1 < e2 : bool

e1 : bool e2 : τ e3 : τ

if e1 then e2 else e3 : τ

25 / 60

Designing a Concurrent Programming Language

Page 37: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example

Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

e ::= n | e + e | tt | ff | if e then e else e | e < e

Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v value tt value ff value

e1 7→ e′1

e1 + e2 7→ e′1 + e2

v1 value e2 7→ e′2

v1 + e2 7→ v1 + e′2 m + n 7→ m + n

e1 7→ e′1

if e1 then e2 else e3 7→ if e′1 then e2 else e3

if tt then e2 else e3 7→ e2 if ff then e2 else e3 7→ e3

e1 7→ e′1

e1 < e2 7→ e′1 < e2

v1 value e2 7→ e′2

v1 < e2 7→ v1 < e′2

m < n

m < n 7→ tt

¬(m < n)

m < n 7→ ff

Static Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

τ ::= nat | bool

n : nat tt : bool ff : boole1 : nat e2 : nat

e1 + e2 : nat

e1 : nat e2 : nat

e1 < e2 : bool

e1 : bool e2 : τ e3 : τ

if e1 then e2 else e3 : τ

25 / 60

Designing a Concurrent Programming Language

Page 38: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example

Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

e ::= n | e + e | tt | ff | if e then e else e | e < e

Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v value tt value ff value

e1 7→ e′1

e1 + e2 7→ e′1 + e2

v1 value e2 7→ e′2

v1 + e2 7→ v1 + e′2 m + n 7→ m + n

e1 7→ e′1

if e1 then e2 else e3 7→ if e′1 then e2 else e3

if tt then e2 else e3 7→ e2 if ff then e2 else e3 7→ e3

e1 7→ e′1

e1 < e2 7→ e′1 < e2

v1 value e2 7→ e′2

v1 < e2 7→ v1 < e′2

m < n

m < n 7→ tt

¬(m < n)

m < n 7→ ff

Static Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

τ ::= nat | bool

n : nat tt : bool ff : boole1 : nat e2 : nat

e1 + e2 : nat

e1 : nat e2 : nat

e1 < e2 : bool

e1 : bool e2 : τ e3 : τ

if e1 then e2 else e3 : τ

25 / 60

Designing a Concurrent Programming Language

Page 39: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example

Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

e ::= n | e + e | tt | ff | if e then e else e | e < e

Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v value tt value ff value

e1 7→ e′1

e1 + e2 7→ e′1 + e2

v1 value e2 7→ e′2

v1 + e2 7→ v1 + e′2 m + n 7→ m + n

e1 7→ e′1

if e1 then e2 else e3 7→ if e′1 then e2 else e3

if tt then e2 else e3 7→ e2 if ff then e2 else e3 7→ e3

e1 7→ e′1

e1 < e2 7→ e′1 < e2

v1 value e2 7→ e′2

v1 < e2 7→ v1 < e′2

m < n

m < n 7→ tt

¬(m < n)

m < n 7→ ff

Static Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

τ ::= nat | bool

n : nat tt : bool ff : bool

e1 : nat e2 : nat

e1 + e2 : nat

e1 : nat e2 : nat

e1 < e2 : bool

e1 : bool e2 : τ e3 : τ

if e1 then e2 else e3 : τ

25 / 60

Designing a Concurrent Programming Language

Page 40: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example

Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

e ::= n | e + e | tt | ff | if e then e else e | e < e

Operational Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v value tt value ff value

e1 7→ e′1

e1 + e2 7→ e′1 + e2

v1 value e2 7→ e′2

v1 + e2 7→ v1 + e′2 m + n 7→ m + n

e1 7→ e′1

if e1 then e2 else e3 7→ if e′1 then e2 else e3

if tt then e2 else e3 7→ e2 if ff then e2 else e3 7→ e3

e1 7→ e′1

e1 < e2 7→ e′1 < e2

v1 value e2 7→ e′2

v1 < e2 7→ v1 < e′2

m < n

m < n 7→ tt

¬(m < n)

m < n 7→ ff

Static Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

τ ::= nat | bool

n : nat tt : bool ff : boole1 : nat e2 : nat

e1 + e2 : nat

e1 : nat e2 : nat

e1 < e2 : bool

e1 : bool e2 : τ e3 : τ

if e1 then e2 else e3 : τ

25 / 60

Designing a Concurrent Programming Language

Page 41: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1

: nat

2

: nat

1 < 2

: bool

0

: nat1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : bool e2 : τ e3 : τif e1 then e2 else e3 : τ

26 / 60

Designing a Concurrent Programming Language

Page 42: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1

: nat

2

: nat

1 < 2

: bool 0

: nat1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : bool e2 : τ e3 : τif e1 then e2 else e3 : τ

26 / 60

Designing a Concurrent Programming Language

Page 43: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1

: nat

2

: nat

1 < 2

: bool 0

: nat1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : nat e2 : nate1 < e2 : bool

26 / 60

Designing a Concurrent Programming Language

Page 44: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2

: bool 0

: nat1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

NONE1

n : nat

26 / 60

Designing a Concurrent Programming Language

Page 45: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool

0

: nat1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : nat e2 : nate1 < e2 : bool

26 / 60

Designing a Concurrent Programming Language

Page 46: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool 0

: nat

1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : bool e2 : τ e3 : τif e1 then e2 else e3 : τ

26 / 60

Designing a Concurrent Programming Language

Page 47: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool 0 : nat

1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

NONE1

n : nat

26 / 60

Designing a Concurrent Programming Language

Page 48: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool 0 : nat

1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : bool e2 : τ e3 : τif e1 then e2 else e3 : τ

26 / 60

Designing a Concurrent Programming Language

Page 49: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool 0 : nat

1

: nat

1

: nat

1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : nat e2 : nate1 + e2 : nat

26 / 60

Designing a Concurrent Programming Language

Page 50: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool 0 : nat

1 : nat 1 : nat1 + 1

: nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

NONE1

n : nat

26 / 60

Designing a Concurrent Programming Language

Page 51: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool 0 : nat

1 : nat 1 : nat1 + 1 : nat

if 1 < 2 then 0 else 1 + 1

: nat

Current Rule(s)

e1 : nat e2 : nate1 + e2 : nat

26 / 60

Designing a Concurrent Programming Language

Page 52: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Static Semantics

Example Type Checking

1 : nat 2 : nat1 < 2 : bool 0 : nat

1 : nat 1 : nat1 + 1 : nat

if 1 < 2 then 0 else 1 + 1 : nat

Current Rule(s)

e1 : bool e2 : τ e3 : τif e1 then e2 else e3 : τ

26 / 60

Designing a Concurrent Programming Language

Page 53: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Concurrent ProgrammingLanguage

27 / 60

Designing a Concurrent Programming Language

Page 54: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Concurrent Programming Language

28 / 60

Designing a Concurrent Programming Language

Page 55: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Concurrent Programming Language

29 / 60

Designing a Concurrent Programming Language

Page 56: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Concurrent Programming Language

Dataflow Architecture

∼ deterministic Petri Net

Express data dependencies between statements

Program is data dependency graph

Execution of functions depends on availability of their input data

At every moment of time all possible execution units are know

MAXIMUM parallelism

30 / 60

Designing a Concurrent Programming Language

Page 57: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Concurrent Programming Language

31 / 60

Designing a Concurrent Programming Language

Page 58: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Concurrent Programming Language

Pro

Expresses all the parallelism in a program

No shared data

Data is consumed and producedNo synchronization required

Contra

Hard to write programs

Inefficient

Always creating and consuming data is expensive

32 / 60

Designing a Concurrent Programming Language

Page 59: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Current Research Directions

33 / 60

Designing a Concurrent Programming Language

Page 60: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Current Research Directions

34 / 60

Designing a Concurrent Programming Language

Page 61: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Current Research Directions

Enhancements

Requirements of operations on data

Access

Read

Function only read the specified object

Write

Function read+write the specified object

35 / 60

Designing a Concurrent Programming Language

Page 62: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Current Research Directions

36 / 60

Designing a Concurrent Programming Language

Page 63: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Current Research Directions

37 / 60

Designing a Concurrent Programming Language

Page 64: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Current Research Directions

38 / 60

Designing a Concurrent Programming Language

Page 65: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Current Research Directions

39 / 60

Designing a Concurrent Programming Language

Page 66: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Featherweight Java

Classes CL ::= class C extends C ′ C f ; K M Constructors K ::= C (C f ) super(f ); this.f = f ; Methods M ::= D m(C x) return e; Expressions e ::= x | e.f | e.m(e) | new C (e)

pure functional object oriented programming language

true subset of Java

40 / 60

Designing a Concurrent Programming Language

Page 67: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Featherweight Java with Permissions

Permissions p ::= write | readonlyClasses CL ::= class C extends C ′ C f ; K M Constructors K ::= C (p C f ) super(f ); this.f = f ; Methods M ::= D m(p C x) pthis return e; Expressions e ::= x | e.f | e.m(e) | new C (e) | e1.f := e2︸ ︷︷ ︸

e1.f :=e2 7→e1

add permissions to parameters of method and method bodies itself

allow changing state (assignment)

41 / 60

Designing a Concurrent Programming Language

Page 68: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Parallel Featherweight Java

Classes CL ::= class C extends C ′ C f ; K M Constructors K ::= C (C f ) super(f ); this.f = f ; Methods M ::= D m(C x) S ; Sync S ::= synch lab let lab x = a in S | return xAtom a ::= x | x .f | x .m(x) | new C (x) | x .f := x

let-normal form

synch labels︸ ︷︷ ︸dependencies

let label︸︷︷︸name

x = exp in ...

42 / 60

Designing a Concurrent Programming Language

Page 69: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Example Let-Normal-Form

D m(readonly C p) write return new Pair(this.f:=p, new Pair(p, p));

D m(C p)

synch let laba a = this.f := p insynch let labb b = new Pair(p, p) in

synch laba, labb let labc c = new Pair(a, b) inreturn c;

43 / 60

Designing a Concurrent Programming Language

Page 70: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Example Let-Normal-Form

D m(readonly C p) write return new Pair(this.f:=p, new Pair(p, p));

D m(C p) synch let laba a = this.f := p in

synch let labb b = new Pair(p, p) insynch laba, labb let labc c = new Pair(a, b) in

return c;

43 / 60

Designing a Concurrent Programming Language

Page 71: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Example Let-Normal-Form

D m(readonly C p) write return new Pair(this.f:=p, new Pair(p, p));

D m(C p) synch let laba a = this.f := p in

synch let labb b = new Pair(p, p) in

synch laba, labb let labc c = new Pair(a, b) inreturn c;

43 / 60

Designing a Concurrent Programming Language

Page 72: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Example Let-Normal-Form

D m(readonly C p) write return new Pair(this.f:=p, new Pair(p, p));

D m(C p) synch let laba a = this.f := p in

synch let labb b = new Pair(p, p) insynch laba, labb let labc c = new Pair(a, b) in

return c;

43 / 60

Designing a Concurrent Programming Language

Page 73: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Example Let-Normal-Form

D m(readonly C p) write return new Pair(this.f:=p, new Pair(p, p));

D m(C p) synch let laba a = this.f := p in

synch let labb b = new Pair(p, p) insynch laba, labb let labc c = new Pair(a, b) in

return c;

43 / 60

Designing a Concurrent Programming Language

Page 74: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

class permission context (global)

Ω ::= ∅ | Ω,C .m.α:permission | Ω,C .C .α:permission

α selects the permission between the permission of themethod itself or the specified parameter:

α = 0 the permission of the receiver object

α > 0 the permission of the N’th parameter

lookup : Ω(x)→ permission

44 / 60

Designing a Concurrent Programming Language

Page 75: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

variable permission/label context

Φ ::= ∅ | Φ, (var , permission, labels)

Φ(var , permission)→ labels lookup

Φ(var , unique)→ label latest write operation

Φ(var , readonly)→ labels all read operations since the last write

Φ′ =[

(variable,permission,Φ(variable,permission),labelnew)(variable,permission,Φ(variable,permission))

45 / 60

Designing a Concurrent Programming Language

Page 76: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

S-Context

S ::= | synch labdeps let labx x = ex in S | return x

update : S′ = S[synch labdeps let labx x = ex in ]

m

S′ = S [labdeps ⇒ labx (x , ex )]

46 / 60

Designing a Concurrent Programming Language

Page 77: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Helper Functions

typeof (e) = C return the type/class a given expression

fresh var() = x returns a fresh variable

var to label(id) = labid returns a fresh label based on thegiven variable

add to readset(Φ, var , label) = Φ′

⇐⇒ Φ′ =[

(var ,label ,Φ(var ,readonly))(var ,readonly ,Φ(var ,readonly))

set var(Φ, var , label) = Φ′

⇐⇒ Φ′ =[

(var ,write,label)(var ,write,Φ(var ,write))

] [(var ,readonly ,label)

(var ,readonly ,Φ(var ,readonly))

47 / 60

Designing a Concurrent Programming Language

Page 78: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

Judgement

(Spre ,Φin) ` e → (Spost ,Φpost , x)

Spre S-Context before the evaluation of e

Φpre Permission-Context before the evaluation of e

e expresssion

Spost S-Context after the evaluation of e

Φpost S-Context after the evaluation of e

x the variable which contains the result of e

48 / 60

Designing a Concurrent Programming Language

Page 79: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-method

(∅,) ` e1 → (Φ1,S1, y)

D m(C p)return e1 → D m(C p)S1 [ return y ; ])

49 / 60

Designing a Concurrent Programming Language

Page 80: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-var

(Φ,Souter ) ` v → (Φ,Souter , v)

50 / 60

Designing a Concurrent Programming Language

Page 81: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-read

(Φ,Souter ) ` e1 → (Φ1,S1, y) labsdeps = Φ1(y , unique)fresh var() = x var to label(x) = labx

Φ2 = add to readset(Φ1, y , labx ) Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` e1.f →

(Φ3,S1 [labsdeps ⇒ labx (x , y .f )] , x)

51 / 60

Designing a Concurrent Programming Language

Page 82: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-read

(Φ,Souter ) ` e1 → (Φ1,S1, y) labsdeps = Φ1(y , unique)

fresh var() = x var to label(x) = labx

Φ2 = add to readset(Φ1, y , labx ) Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` e1.f →

(Φ3,S1 [labsdeps ⇒ labx (x , y .f )] , x)

51 / 60

Designing a Concurrent Programming Language

Page 83: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-read

(Φ,Souter ) ` e1 → (Φ1,S1, y) labsdeps = Φ1(y , unique)fresh var() = x var to label(x) = labx

Φ2 = add to readset(Φ1, y , labx ) Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` e1.f →

(Φ3,S1 [labsdeps ⇒ labx (x , y .f )] , x)

51 / 60

Designing a Concurrent Programming Language

Page 84: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-read

(Φ,Souter ) ` e1 → (Φ1,S1, y) labsdeps = Φ1(y , unique)fresh var() = x var to label(x) = labx

Φ2 = add to readset(Φ1, y , labx ) Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` e1.f →

(Φ3,S1 [labsdeps ⇒ labx (x , y .f )] , x)

51 / 60

Designing a Concurrent Programming Language

Page 85: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-read

(Φ,Souter ) ` e1 → (Φ1,S1, y) labsdeps = Φ1(y , unique)fresh var() = x var to label(x) = labx

Φ2 = add to readset(Φ1, y , labx ) Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` e1.f → (Φ3,S1 [labsdeps ⇒ labx (x , y .f )] , x)

51 / 60

Designing a Concurrent Programming Language

Page 86: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-assign

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)labsdeps = Φ2(y , readonly),Φ2(z, unique)fresh var() = x var to label(x) = labx

Φ3 = set var(Φ2, y , labx ) Φ4 = set var(Φ3, x , labx )

(Φ1,Souter ) ` e1.f := e2 →

(Φ4,S2

ˆlabsdeps ⇒ labx (x , y .f := z)

˜, x)

52 / 60

Designing a Concurrent Programming Language

Page 87: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-assign

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)

labsdeps = Φ2(y , readonly),Φ2(z, unique)fresh var() = x var to label(x) = labx

Φ3 = set var(Φ2, y , labx ) Φ4 = set var(Φ3, x , labx )

(Φ1,Souter ) ` e1.f := e2 →

(Φ4,S2

ˆlabsdeps ⇒ labx (x , y .f := z)

˜, x)

52 / 60

Designing a Concurrent Programming Language

Page 88: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-assign

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)labsdeps = Φ2(y , readonly),Φ2(z, unique)

fresh var() = x var to label(x) = labx

Φ3 = set var(Φ2, y , labx ) Φ4 = set var(Φ3, x , labx )

(Φ1,Souter ) ` e1.f := e2 →

(Φ4,S2

ˆlabsdeps ⇒ labx (x , y .f := z)

˜, x)

52 / 60

Designing a Concurrent Programming Language

Page 89: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-assign

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)labsdeps = Φ2(y , readonly),Φ2(z, unique)fresh var() = x var to label(x) = labx

Φ3 = set var(Φ2, y , labx ) Φ4 = set var(Φ3, x , labx )

(Φ1,Souter ) ` e1.f := e2 →

(Φ4,S2

ˆlabsdeps ⇒ labx (x , y .f := z)

˜, x)

52 / 60

Designing a Concurrent Programming Language

Page 90: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-assign

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)labsdeps = Φ2(y , readonly),Φ2(z, unique)fresh var() = x var to label(x) = labx

Φ3 = set var(Φ2, y , labx ) Φ4 = set var(Φ3, x , labx )

(Φ1,Souter ) ` e1.f := e2 →

(Φ4,S2

ˆlabsdeps ⇒ labx (x , y .f := z)

˜, x)

52 / 60

Designing a Concurrent Programming Language

Page 91: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-assign

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)labsdeps = Φ2(y , readonly),Φ2(z, unique)fresh var() = x var to label(x) = labx

Φ3 = set var(Φ2, y , labx ) Φ4 = set var(Φ3, x , labx )

(Φ1,Souter ) ` e1.f := e2 → (Φ4,S2

ˆlabsdeps ⇒ labx (x , y .f := z)

˜, x)

52 / 60

Designing a Concurrent Programming Language

Page 92: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-new

(Φ,Souter ) ` e1 → (Φ1,S1, y)Ω(C .C .1) = p1 fresh var() = x var to label(x) = labx

(p1 = write) ? (Φ2 = set var(Φ1, y , labx ) ; labsdeps = Φ1(y , readonly))(p1 = readonly) ? (Φ2 = add to readset(Φ1, y , labx ) ; labsdeps = Φ1(y , unique))Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` new C(e1)→

(Φ3,S1

ˆlabdeps ⇒ labx (x , new C(y))

˜, z)

53 / 60

Designing a Concurrent Programming Language

Page 93: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-new

(Φ,Souter ) ` e1 → (Φ1,S1, y)

Ω(C .C .1) = p1 fresh var() = x var to label(x) = labx

(p1 = write) ? (Φ2 = set var(Φ1, y , labx ) ; labsdeps = Φ1(y , readonly))(p1 = readonly) ? (Φ2 = add to readset(Φ1, y , labx ) ; labsdeps = Φ1(y , unique))Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` new C(e1)→

(Φ3,S1

ˆlabdeps ⇒ labx (x , new C(y))

˜, z)

53 / 60

Designing a Concurrent Programming Language

Page 94: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-new

(Φ,Souter ) ` e1 → (Φ1,S1, y)Ω(C .C .1) = p1 fresh var() = x var to label(x) = labx

(p1 = write) ? (Φ2 = set var(Φ1, y , labx ) ; labsdeps = Φ1(y , readonly))(p1 = readonly) ? (Φ2 = add to readset(Φ1, y , labx ) ; labsdeps = Φ1(y , unique))Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` new C(e1)→

(Φ3,S1

ˆlabdeps ⇒ labx (x , new C(y))

˜, z)

53 / 60

Designing a Concurrent Programming Language

Page 95: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-new

(Φ,Souter ) ` e1 → (Φ1,S1, y)Ω(C .C .1) = p1 fresh var() = x var to label(x) = labx

(p1 = write) ? (Φ2 = set var(Φ1, y , labx ) ; labsdeps = Φ1(y , readonly))

(p1 = readonly) ? (Φ2 = add to readset(Φ1, y , labx ) ; labsdeps = Φ1(y , unique))Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` new C(e1)→

(Φ3,S1

ˆlabdeps ⇒ labx (x , new C(y))

˜, z)

53 / 60

Designing a Concurrent Programming Language

Page 96: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-new

(Φ,Souter ) ` e1 → (Φ1,S1, y)Ω(C .C .1) = p1 fresh var() = x var to label(x) = labx

(p1 = write) ? (Φ2 = set var(Φ1, y , labx ) ; labsdeps = Φ1(y , readonly))(p1 = readonly) ? (Φ2 = add to readset(Φ1, y , labx ) ; labsdeps = Φ1(y , unique))

Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` new C(e1)→

(Φ3,S1

ˆlabdeps ⇒ labx (x , new C(y))

˜, z)

53 / 60

Designing a Concurrent Programming Language

Page 97: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-new

(Φ,Souter ) ` e1 → (Φ1,S1, y)Ω(C .C .1) = p1 fresh var() = x var to label(x) = labx

(p1 = write) ? (Φ2 = set var(Φ1, y , labx ) ; labsdeps = Φ1(y , readonly))(p1 = readonly) ? (Φ2 = add to readset(Φ1, y , labx ) ; labsdeps = Φ1(y , unique))Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` new C(e1)→

(Φ3,S1

ˆlabdeps ⇒ labx (x , new C(y))

˜, z)

53 / 60

Designing a Concurrent Programming Language

Page 98: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-new

(Φ,Souter ) ` e1 → (Φ1,S1, y)Ω(C .C .1) = p1 fresh var() = x var to label(x) = labx

(p1 = write) ? (Φ2 = set var(Φ1, y , labx ) ; labsdeps = Φ1(y , readonly))(p1 = readonly) ? (Φ2 = add to readset(Φ1, y , labx ) ; labsdeps = Φ1(y , unique))Φ3 = set var(Φ2, x , labx )

(Φ,Souter ) ` new C(e1)→ (Φ3,S1

ˆlabdeps ⇒ labx (x , new C(y))

˜, z)

53 / 60

Designing a Concurrent Programming Language

Page 99: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 100: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)

typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 101: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 102: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 103: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))

(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 104: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))

(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 105: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))

(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 106: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))

Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 107: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→

(Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 108: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Core Language

R-call

(Φ,Souter ) ` e1 → (Φ1,S1, y) (Φ1,S1) ` e2 → (Φ2,S2, z)typeof (e1) = C1 Ω(C1.m.0) = p0 Ω(C1.m.1) = p1

fresh var() = x var to label(x) = labx

(p0 = write) ? (Φ3 = set var(Φ2, y , labx ) ; labs0 = Φ2(y , readonly)))(p0 = readonly) ? (Φ3 = add to readset(Φ2, y , labx ) ; labs0 = Φ2(y , unique)))(p1 = write) ? (Φ4 = set var(Φ3, z, labx ) ; labs1 = Φ3(z, readonly)))(p0 = readonly) ? (Φ4 = add to readset(Φ3, z, labx ) ; labs1 = Φ3(z, unique)))Φ5 = set var(Φ4, x , labx ) labsdeps = labs0, labs1

(Φ, Souter ) ` e1.m(e2)→ (Φ5,S2

ˆlabsdeps ⇒ labx (x , y .m(z))

˜, x)

54 / 60

Designing a Concurrent Programming Language

Page 109: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Conclusion

55 / 60

Designing a Concurrent Programming Language

Page 110: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Conclusion

Why is this relevant ?

releave the user from parallel thinking

not thinkking about which code paths could execute in parallel witheach otherthinking about which piece of code accesses which objects in whichwayannotate code and let the runtime decide

let the compiler verify that the program is ”correct”

no race conditionsno deadlocks

56 / 60

Designing a Concurrent Programming Language

Page 111: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Conclusion

Current State

definition of core language

use permission to describe data usage

definition of ”intermediate” language

explicit represents data dependencies of code paths

re-writing rules

transform core language → intermediate language

57 / 60

Designing a Concurrent Programming Language

Page 112: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Conclusion

Open Issues

Handling of shared data accesses

for examples like producer-consumer

proving soundness and correctness of core language / transformation

need there be another step between the ”intermediate” languageand the runtime (e.g. byte-code) ?

develop the runtime itself

58 / 60

Designing a Concurrent Programming Language

Page 113: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Conclusion

More Informations

Types and Programming LanguagesBenjamin C. PierceThe MIT Press

Advanced Topics in Typesand Programming LanguagesBenjamin C. PierceThe MIT Press

59 / 60

Designing a Concurrent Programming Language

Page 114: Designing a Concurrent Programming Languageaeminium.dei.uc.pt/images/1/1e/Designing-a-Concurrent-Programmin… · Designing a Concurrent Programming Language. Motivation Language

Motivation Language Design Concurrent Programming Language Conclusion

Questions ?

60 / 60

Designing a Concurrent Programming Language