are at odds with linear types more generally control
play

. 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,


  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.

  2. A Theory of Substructural Types & Control Jesse A. Tov Riccardo Pucella OOPSLA October 26, 2011 .

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

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

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

  6. Substructural Types L = 1 . . . . . . . . . R elevant A ffine U nlimited 5

  7. Substructural Types L = 1 . . . . . . . . . ≥ 1 R A ffine U nlimited 5

  8. Substructural Types L = 1 . . . . . . . . . ≥ 1 ≤ 1 R A U nlimited 5

  9. Substructural Types L = 1 . . . . . . . . ≥ 1 ≤ 1 R A U 5

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

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

  12. 7

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

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

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

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

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

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

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

  20. shift/reset . . . . . . . . . . . . (Danvy & Filinski 1989) exceptions . . . · · affine types . . . · · linear types 9

  21. . . . . . . . . . exceptions shift/reset . . . . . . . · · · · affine types . . . . . . · · · · linear types (Danvy & Filinski 1989) 9

  22. . (Danvy & Filinski 1989) exceptions shift/reset . . . . . . . . . · . · · · . · · affine types . . . . . . . . . . . . · . · . · · · · · · . . linear types 9

  23. . 10

  24. . 10

  25. . 10

  26. ; c . . . e : . 10

  27. . . . e : . ; c 10

  28. . . Q . . Q . URAL. L . . . . . R Qualifiers A U . (Ahmed et al. 2005) 11

  29. . . Q . URAL. L . . . . . R Qualifiers A U . . ⪯ Q . (Ahmed et al. 2005) 11

  30. . URAL. L . . . . . R Qualifiers A U . . ⪯ Q . . ⪯ Q . (Ahmed et al. 2005) 11

  31. { U, R, A, L } L . . Q Q exceptions shift/reset effect names: C c pure effect: . C sequencing: . : C . C . . C C . Q qualifier bound: . URAL ( C ) C = ( C , ., ., ⪰ ) . 12

  32. L . . Q Q exceptions shift/reset { U, R, A, L } pure effect: . C sequencing: . : C . C . . C C . Q qualifier bound: . URAL ( C ) C = ( C , ., ., ⪰ ) effect names: C ∋ c . 12

  33. . . Q Q exceptions shift/reset { U, R, A, L } L sequencing: . : C . C . . C C . Q qualifier bound: . URAL ( C ) C = ( C , ., ., ⪰ ) effect names: C ∋ c pure effect: . ∈ C . 12

  34. . Q Q exceptions shift/reset { U, R, A, L } L . C . Q qualifier bound: . URAL ( C ) C = ( C , ., ., ⪰ ) effect names: C ∋ c pure effect: . ∈ C sequencing: . : C . C . . C . 12

  35. exceptions shift/reset { U, R, A, L } L . . Q Q . URAL ( C ) C = ( C , ., ., ⪰ ) effect names: C ∋ c pure effect: . ∈ C sequencing: . : C . C . . C ⊆ C . Q qualifier bound: ⪰ . 12

  36. shift/reset { U, R, A, L } L . . Q Q . URAL ( C ) C = ( C , ., ., ⪰ ) exceptions effect names: C P ( Exn ) . pure effect: . sequencing: . . . { φ } ⪰ A qualifier bound: ⪰ . 12

  37. . URAL ( C ) C = ( C , ., ., ⪰ ) exceptions shift/reset effect names: C P ( Exn ) { U, R, A, L } . pure effect: . L sequencing: . . . . { φ } ⪰ A . Q ⪰ Q qualifier bound: ⪰ . 12

  38. Application . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  39. Application . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  40. Context Splitting . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  41. Qualifier . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  42. Control Effects . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  43. Control Effects . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  44. Control Effects . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  45. Effect of e 2 . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  46. Effect of e 2 . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  47. Effect of e 1 . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  48. Effect of e 1 . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  49. Application . c . 1 . e 1 : Q 1 (. ʼ . . ) ; c 1 (check e 1 ) . 2 . e 2 : . ʼ ; c 2 (check e 2 ) . c 2 ⪰ Q 1 ( e 2 effect ok) . . 2 ⪯ Q 2 ( e 2 resources) . c 1 ⪰ Q 2 ( e 1 effect ok) . c 1 . c 2 . c : CTL (net effect) . . 1 ⊞ . 2 . e 1 e 2 : . ; c 1 . c 2 . c . 13

  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

  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

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

  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

  54. no effect system Vault Alms . . . . . . . . Choose Two exceptions linear types this work 16

Recommend


More recommend