. are at odds with linear types. More generally, control effects - - PowerPoint PPT Presentation

are at odds with linear types more generally control
SMART_READER_LITE
LIVE PREVIEW

. are at odds with linear types. More generally, control effects - - PowerPoint PPT Presentation

. . Exceptions are invaluable for structured error handling in high-level languages, but they . are at odds with linear types. More generally, control effects may delete or duplicate por- tions of the stack, which, if we are not careful,


slide-1
SLIDE 1

.

.

.

Exceptions are invaluable for structured error handling in high-level languages, but they are at odds with linear types. More generally, control effects may delete or duplicate por- tions of the stack, which, if we are not careful, can invalidate all substructural usage guaran- tees for values on the stack.

slide-2
SLIDE 2

A Theory of

Substructural Types & Control

Jesse A. Tov Riccardo Pucella OOPSLA October 26, 2011 .

slide-3
SLIDE 3

Control Operators exceptions, call/cc, shift and reset, coroutines, …

3

slide-4
SLIDE 4

Substructural Types linear types, affine types, typestate, session types, …

4

slide-5
SLIDE 5

Substructural Types . L . R . A . U . inear . elevant . ffine . nlimited .

5

slide-6
SLIDE 6

Substructural Types . L . R . A . U . elevant . ffine . nlimited .

= 1

.

5

slide-7
SLIDE 7

Substructural Types . L . R . A . U . ffine . nlimited .

= 1

.

≥ 1

.

5

slide-8
SLIDE 8

Substructural Types . L . R . A . U . nlimited .

= 1

.

≥ 1

.

≤ 1

.

5

slide-9
SLIDE 9

Substructural Types . L . R . A . U .

= 1

.

≥ 1

.

≤ 1

.

5

slide-10
SLIDE 10

Substructural Types type file : A val open : string . . file val read : file . . file . char val write : file . char . file val close : file . . unit

6

slide-11
SLIDE 11

Substructural Types type file : L val open : string . . file val read : file . . file . char val write : file . char . file val close : file . . unit

6

slide-12
SLIDE 12

7

slide-13
SLIDE 13

let confFile = open confFileName in let (conf, confFile) = parseConfFile confFile in let logFile = open conf.logFileName in close confFile; logFile

8

slide-14
SLIDE 14

let confFile = #⟨file:. . conf⟩ in let (conf, confFile) = parseConfFile confFile in let logFile = open conf.logFileName in close confFile; logFile

8

slide-15
SLIDE 15

let confFile = # file:. conf in let (conf, confFile) = parseConfFile #⟨file:. . conf⟩ in let logFile = open conf.logFileName in close confFile; logFile

8

slide-16
SLIDE 16

let confFile = # file:. conf in let (conf, confFile) = ({ . . . }, #⟨file:. . conf⟩) in let logFile = open conf.logFileName in close confFile; logFile

8

slide-17
SLIDE 17

let confFile = # file:. conf in let (conf, confFile) = ({ }, # file:. . conf ) in let logFile = open { . . . }.logFileName in close #⟨file:. . conf⟩; logFile

8

slide-18
SLIDE 18

let confFile = # file:. conf in let (conf, confFile) = ({ }, # file:. . conf ) in let logFile = open “/var/log/. . .” in close #⟨file:. . conf⟩; logFile

8

slide-19
SLIDE 19

let confFile = # file:. conf in let (conf, confFile) = ({ }, # file:. . conf ) in let logFile = raise IOError . .

8

slide-20
SLIDE 20

exceptions shift/reset affine types . .

·

.

·

. . . . linear types . .

·

.

·

. . . . . . . .

(Danvy & Filinski 1989)

9

slide-21
SLIDE 21

exceptions shift/reset affine types . .

·

.

·

. .

·

.

·

. . . linear types . .

·

.

·

. . . . .

·

.

·

. . . .

(Danvy & Filinski 1989)

9

slide-22
SLIDE 22

exceptions shift/reset affine types . .

·

.

·

. .

·

.

· .

. . .

·

.

·

linear types . .

·

.

· .

. . .

·

.

·

. .

·

.

· .

. . .

·

.

·

.

(Danvy & Filinski 1989)

9

slide-23
SLIDE 23

.

10

slide-24
SLIDE 24

.

10

slide-25
SLIDE 25

.

10

slide-26
SLIDE 26

.

. . e : . ; c

10

slide-27
SLIDE 27

.

. . e : . ; c

10

slide-28
SLIDE 28

. URAL.

(Ahmed et al. 2005)

. Qualifiers . L . R . A . U

. .

Q

. .

Q

.

11

slide-29
SLIDE 29

. URAL.

(Ahmed et al. 2005)

. Qualifiers . L . R . A . U

. . ⪯ Q . .

Q

.

11

slide-30
SLIDE 30

. URAL.

(Ahmed et al. 2005)

. Qualifiers . L . R . A . U

. . ⪯ Q . . ⪯ Q

.

11

slide-31
SLIDE 31

. URAL(C)

C = (C, ., ., ⪰)

exceptions shift/reset

effect names: C

c { U, R, A, L }

pure effect: .

C L

sequencing: .

: C . C . . C .

qualifier bound:

C . Q . Q Q

.

12

slide-32
SLIDE 32

. URAL(C)

C = (C, ., ., ⪰)

exceptions shift/reset

effect names: C

∋ c

{ U, R, A, L }

pure effect: .

C L

sequencing: .

: C . C . . C .

qualifier bound:

C . Q . Q Q

.

12

slide-33
SLIDE 33

. URAL(C)

C = (C, ., ., ⪰)

exceptions shift/reset

effect names: C

∋ c

{ U, R, A, L }

pure effect: .

∈ C

L

sequencing: .

: C . C . . C .

qualifier bound:

C . Q . Q Q

.

12

slide-34
SLIDE 34

. URAL(C)

C = (C, ., ., ⪰)

exceptions shift/reset

effect names: C

∋ c

{ U, R, A, L }

pure effect: .

∈ C

L

sequencing: .

: C . C . . C .

qualifier bound:

C . Q . Q Q

.

12

slide-35
SLIDE 35

. URAL(C)

C = (C, ., ., ⪰)

exceptions shift/reset

effect names: C

∋ c

{ U, R, A, L }

pure effect: .

∈ C

L

sequencing: .

: C . C . . C .

qualifier bound: ⪰

⊆ C . Q

. Q Q

.

12

slide-36
SLIDE 36

. URAL(C)

C = (C, ., ., ⪰)

exceptions shift/reset

effect names: C

P(Exn)

{ U, R, A, L }

pure effect: .

. L

sequencing: .

. .

qualifier bound: ⪰

. {φ} ⪰ A . Q Q

.

12

slide-37
SLIDE 37

. URAL(C)

C = (C, ., ., ⪰)

exceptions shift/reset

effect names: C

P(Exn)

{ U, R, A, L }

pure effect: .

. L

sequencing: .

. .

qualifier bound: ⪰

. {φ} ⪰ A . Q ⪰ Q

.

12

slide-38
SLIDE 38

Application

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-39
SLIDE 39

Application

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-40
SLIDE 40

Context Splitting

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-41
SLIDE 41

Qualifier

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-42
SLIDE 42

Control Effects

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-43
SLIDE 43

Control Effects

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-44
SLIDE 44

Control Effects

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-45
SLIDE 45

Effect of e2

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-46
SLIDE 46

Effect of e2

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-47
SLIDE 47

Effect of e1

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-48
SLIDE 48

Effect of e1

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-49
SLIDE 49

Application

(check e1)

. 1 . e1 : Q1(. ʼ . . c . ) ; c1

(check e2)

. 2 . e2 : . ʼ ; c2

(e2 effect ok)

. c2 ⪰ Q1

(e2 resources)

. . 2 ⪯ Q2

(e1 effect ok)

. c1 ⪰ Q2

(net effect)

. c1 . c2 . c : CTL . . 1 ⊞ . 2 . e1 e2 : . ; c1 . c2 . c .

13

slide-50
SLIDE 50

Does It Work? let confFile = open confFileName in let (conf, confFile) = parseConfFile confFile in let logFile = open conf.logFileName in close confFile; logFile

14

slide-51
SLIDE 51

Does It Work? let confFile = open confFileName in let (conf, confFile) = parseConfFile confFile in close confFile; let logFile = open conf.logFileName in logFile

14

slide-52
SLIDE 52

Does It Work? Theorem (Type safety). If • . e : . ; . then eval(e) ̸= Wrong. Proof (Parametrized by C). Transform e to continuation-passing style . . . Three instances for : exceptions, shift/reset, and shift/reset with answer-type modification

15

slide-53
SLIDE 53

Does It Work? Theorem (Type safety). If • . e : . ; . then eval(e) ̸= Wrong. Proof (Parametrized by C). Transform e to continuation-passing style . . . Three instances for C: exceptions, shift/reset, and shift/reset with answer-type modification

15

slide-54
SLIDE 54

. Choose Two . no effect system . linear types . exceptions .

Vault

.

this work

.

Alms

.

16

slide-55
SLIDE 55

The Take-Away Designing a substructural type system? Considering adding control effects? . Read our paper http://www.ccs.neu.edu/∼tov/pubs/

17