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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend