skip to main content
research-article
Free Access

The Design and Formalization of Mezzo, a Permission-Based Programming Language

Published:02 August 2016Publication History
Skip Abstract Section

Abstract

The programming language Mezzo is equipped with a rich type system that controls aliasing and access to mutable memory. We give a comprehensive tutorial overview of the language. Then we present a modular formalization of Mezzo’s core type system, in the form of a concurrent λ-calculus, which we successively extend with references, locks, and adoption and abandon, a novel mechanism that marries Mezzo’s static ownership discipline with dynamic ownership tests. We prove that well-typed programs do not go wrong and are data-race free. Our definitions and proofs are machine checked.

References

  1. Peter Achten and Marinus J. Plasmeijer. 1995. The ins and outs of clean I/O. J. Funct. Program. 5, 1 (1995), 81--110.Google ScholarGoogle ScholarCross RefCross Ref
  2. Amal Ahmed, Matthew Fluet, and Greg Morrisett. 2007. L<sup>3</sup>: A linear language with locations. Fundam. Inform. 77, 4 (2007), 397--449. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Afshin Amighi, Christian Haack, Marieke Huisman, and Clément Hurlin. 2015. Permission-based separation logic for multithreaded Java programs. Logic. Methods. Comput. Sci. 11, 1 (2015), 1--66.Google ScholarGoogle ScholarCross RefCross Ref
  4. Timos Antonopoulos, Nikos Gorogiannis, Christoph Haase, Max I. Kanovich, and Joël Ouaknine. 2014. Foundations for decision problems in separation logic with general inductive predicates. In Foundations of Software Science and Computation Structures (FOSSACS) (Lecture Notes in Computer Science), Vol. 8412. Springer, Berlin, 411--425.Google ScholarGoogle Scholar
  5. Thibaut Balabonski and François Pottier. 2014. A Coq formalization of Mezzo, take 2. (July 2014). http://gallium.inria.fr/&sim;fpottier/mezzo/mezzo-coq.tar.gz.Google ScholarGoogle Scholar
  6. Thibaut Balabonski, François Pottier, and Jonathan Protzenko. 2014. Type soundness and race freedom for Mezzo. In Proceedings of the 12th International Symposium on Functional and Logic Programming (FLOPS 2014) (Lecture Notes in Computer Science), Vol. 8475. Springer, Berlin, 253--269.Google ScholarGoogle ScholarCross RefCross Ref
  7. Andrew Barber. 1996. Dual Intuitionistic Linear Logic. Technical Report ECS-LFCS-96-347. Laboratory for Foundations of Computer Science, School of Informatics at the University of Edinburgh.Google ScholarGoogle Scholar
  8. Batteries included. 2014. BatList. (2014).Google ScholarGoogle Scholar
  9. Josh Berdine, Cristiano Calcagno, and Peter W. O’Hearn. 2004. A decidable fragment of separation logic. In Foundations of Software Technology and Theoretical Computer Science (FSTTCS) (Lecture Notes in Computer Science), Vol. 3328. Springer, Berlin, 97--109. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Josh Berdine, Cristiano Calcagno, and Peter W. O’Hearn. 2005a. Smallfoot: Modular automatic assertion checking with separation logic. In Formal Methods for Components and Objects (Lecture Notes in Computer Science), Vol. 4111. Springer, Berlin, 115--137. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Josh Berdine, Cristiano Calcagno, and Peter W. O’Hearn. 2005b. Symbolic execution with separation logic. In Asian Symposium on Programming Languages and Systems (APLAS) (Lecture Notes in Computer Science), Vol. 3780. Springer, Berlin, 52--68. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. Kevin Bierhoff and Jonathan Aldrich. 2007. Modular typestate checking of aliased objects. In Obj ect-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 301--320. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Kevin Bierhoff, Nels E. Beckman, and Jonathan Aldrich. 2009. Practical API protocol checking with access permissions. In Europe an Conference on Object-Oriented Programming (ECOOP) (Lecture Notes in Computer Science), Vol. 5653. Springer, Berlin, 195--219. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Kevin Bierhoff, Nels E. Beckman, and Jonathan Aldrich. 2011. Checking concurrent typestate with access permissions in plural: A retrospective. In Engineering of Software, Peri L. Tarr and Alexander L. Wolf (Eds.). Springer, Berlin, 35--48.Google ScholarGoogle Scholar
  15. Lars Birkedal, Bernhard Reus, Jan Schwinghammer, Kristian Støvring, Jacob Thamsborg, and Hongseok Yang. 2011. Step-indexed Kripke models over recursive worlds. In Principles of Programming Languages (POPL). 119--132. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Robert L. Bocchino Jr. 2013. Alias control for deterministic parallelism. In Aliasing in Object-Oriented Programming. Types, Analysis and Verification, Dave Clarke, James Noble, and Tobias Wrigstad (Eds.). Lecture Notes in Computer Science, Vol. 7850. Springer, Berlin, 156--195. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. Robert L. Bocchino Jr. and Vikram S. Adve. 2011. Types, regions, and effects for safe programming with object-oriented parallel frameworks. In European Conference on Object-Oriented Programming (ECOOP) (Lecture Notes in Computer Science), Vol. 6813. Springer, Berlin, 306--332. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Robert L. Bocchino Jr., Vikram S. Adve, Sarita V. Adve, and Marc Snir. 2009a. Parallel programming must be deterministic by default. In USENIX Conference on Hot Topics in Parallelism (HotPar). 1--6. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Robert L. Bocchino Jr., Vikram S. Adve, Danny Dig, Sarita V. Adve, Stephen Heumann, Rakesh Komuravelli, Jeffrey Overbey, Patrick Simmons, Hyojin Sung, and Mohsen Vakilian. 2009b. A type and effect system for deterministic parallel Java. In Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 97--116. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Robert L. Bocchino Jr., Stephen Heumann, Nima Honarmand, Sarita V. Adve, Vikram S. Adve, Adam Welc, and Tatiana Shpeisman. 2011. Safe nondeterminism in a deterministic-by-default parallel language. In Principles of Programming Languages (POPL). 535--548. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Richard Bornat, Cristiano Calcagno, Peter O’Hearn, and Matthew Parkinson. 2005. Permission accounting in separation logic. In Princi ples of Programming Languages (POPL). 259--270. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Chandrasekhar Boyapati, Robert Lee, and Martin Rinard. 2002. Ownership types for safe programming: Preventing data races and deadlocks. In Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 211--230. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. John Boyland. 2003. Checking interference with fractional permissions. In Static Analysis Symposium (SAS) (Lecture Notes in Computer Science), Vol. 2694. Springer, Berlin, 55--72. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. John Tang Boyland. 2010. Semantics of fractional permissions with nesting. ACM Trans. Program. Lang. Syst. 32, 6 (2010), 22:1--22:33. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Thomas Braibant and Damien Pous. 2011. Tactics for reasoning modulo AC in Coq. In Certified Programs and Proofs (Lecture Notes in Computer Science), Vol. 7086. Springer, Berlin, 167--182. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Stephen D. Brookes. 2004. A semantics for concurrent separation logic. In International Conference on Concurrency Theory (CONCUR) (Lecture Notes in Computer Science), Vol. 3170. Springer, Berlin, 16--34.Google ScholarGoogle ScholarCross RefCross Ref
  27. Michele Bugliesi, Stefano Calzavara, Fabienne Eigner, and Matteo Maffei. 2015. Affine Refinement Types for Secure Distributed Programming. (2015). To appear.Google ScholarGoogle Scholar
  28. Alexandre Buisse, Lars Birkedal, and Kristian Støvring. 2011. A step-indexed Kripke model of separation logic for storable locks. Electron. Notes Theor. Comput. Sci. 276 (2011), 121--143. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. Cristiano Calcagno, Dino Distefano, and Peter O’Hearn. 2015. Open-sourcing Facebook Infer: Identify bugs before you ship. https://code.facebook.com/posts/1648953042007882/open-sourcing-facebook-infer-identify-bugs-before-you-ship/. (2015).Google ScholarGoogle Scholar
  30. Bor-Yuh Evan Chang and Xavier Rival. 2008. Relational inductive shape analysis. In Principles of Programming Languages (POPL). 247--260. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Arthur Charguéraud. 2010. Characteristic Formulae for Mechanized Program Verification. Ph.D. Dissertation. Université Paris 7.Google ScholarGoogle Scholar
  32. Arthur Charguéraud and François Pottier. 2008. Functional translation of a calculus of capabilities. In International Conference on Functional Programming (ICFP). 213--224. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Adam Chlipala. 2013. Certified Programming and Dependent Types. MIT Press, Cambridge, MA.Google ScholarGoogle Scholar
  34. Jacek Chrzaszcz. 1998. Polymorphic subtyping without distributivity. In International Symposium on Mathematical Foundations of Computer Science (Lecture Notes in Computer Science), Vol. 1450. Springer, Berlin, 346--355. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Dave Clarke, Sophia Drossopoulou, and James Noble. 2004. Alia sing, confinement, and ownership in object-oriented programming. In Object-Oriented Technology. ECOOP 2003 Workshop Reader. Lecture Notes in Computer Science, Vol. 3013. Springer, Berin, 197--207.Google ScholarGoogle Scholar
  36. Dave Clarke, Johan Östlund, Ilya Sergey, and Tobias Wrigstad. 2013. Owner ship types: A survey. In Aliasing in Object-Oriented Programming. Lecture Notes in Computer Science, Vol. 7850. Springer, Berlin, 15--58. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Dave Clarke and Tobias Wrigstad. 2003. External uniqueness is unique enough. In Eur opean Conference on Object-Oriented Programming (ECOOP) (Lecture Notes in Computer Science), Vol. 2743. Springer, Berlin, 176--200.Google ScholarGoogle Scholar
  38. David G. Clarke, James Noble, and John Potter. 2001. Simple ownership types for object containment. In European Conference on Object-Oriented Programming (ECOOP) (Lecture Notes in Computer Science), Vol. 2072. Springer, Berlin, 53--76. Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. David G. Clarke, John M. Potter, and James Noble. 1998. Ownership types for flexible alias protection. In Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 48--64. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. Ernie Cohen, Markus Dahlweid, Mark A. Hillebrand, Dirk Leinenbach, Michal Moskal, Thomas Santen, Wolfram Schulte, and Stephan Tobies. 2009. VCC: A practical system for verifying concurrent C. In Theorem Proving in Higher Order Logics (TPHOLs) (Lecture Notes in Computer Science), Vol. 5674. Springer, Berlin, 23--42. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Byron Cook, Christoph Haase, Joël Ouaknine, Matthew J. Parkinson, and James Worrell. 2011. Tractable reasoning in a fragment of separation logic. In International Conference on Concurrency Theory (CONCUR) (Lecture Notes in Computer Science), Vol. 6901. Springer, Berlin, 235--249. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Luis Damas. 1985. Type Assignment in Programming Languages. Ph.D. Dissertation. University of Edinburgh.Google ScholarGoogle Scholar
  43. Benjamin Delaware, Bruno C. d. S. Oliveira, and Tom Schrijvers. 2013. Meta- theory à la carte. In Principles of Programming Languages (POPL). 207--218.Google ScholarGoogle Scholar
  44. Robert DeLine and Manuel Fähndrich. 2001. Enforcing high-level protocols in low-level software. In Progra mming Language Design and Implementation (PLDI). 59--69. Google ScholarGoogle ScholarDigital LibraryDigital Library
  45. David L. Detlefs, K. Rustan, M. Leino, and Greg Nelson. 1998. Wrestling with rep exposure. Research Report 156. SRC.Google ScholarGoogle Scholar
  46. Werner Dietl and Peter Müller. 2005. Universes: Lightweight ownership for JML. J. Object Technol. 4, 8 (2005), 5--32.Google ScholarGoogle ScholarCross RefCross Ref
  47. Thomas Dinsdale-Young, Lars Birkedal, Philippa Gardner, Matthew J. Parkinson, and Hongseok Yang. 2013. Views: Compositional reasoning for concurrent programs. In Principles of Programming Languages (POPL). 287--300. Google ScholarGoogle ScholarDigital LibraryDigital Library
  48. Thomas Dinsdale-Young, Mike Dodds, Philippa Gardner, Matthew J. Parkinson, and Viktor Vafeiadis. 2010. Concurrent abstract predicates. In European Conference on Object-Oriented Programming (ECOOP) (Lecture Notes in Computer Science), Vol. 6183. Springer, Berlin, 504--528. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. Dino Distefano and Matthew J. Parkinson. 2008. jStar: Towards practical verification for Java. In Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 213--226. Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. Robert Dockins, Aquinas Hobor, and Andrew W. Appel. 2009. A fresh look at separation algebras and share accounting. In Asian Symposium on Programming Languages and Systems (APLAS) (Lecture Notes in Computer Science), Vol. 5904. Springer, Berlin, 161--177. Google ScholarGoogle ScholarDigital LibraryDigital Library
  51. Jean-Christophe Filliâtre, Léon Gondelman, and Andrei Paskevich. 2014. The spirit of ghost code. In Computer Aided Verification (Lecture Notes in Computer Science), Vol. 8559. Springer, Berlin, 1--16. Google ScholarGoogle ScholarDigital LibraryDigital Library
  52. Cormac Flanagan and Martín Abadi. 1999. Types for safe locking. In European Symposium on Programming (ESOP) (Lecture Notes in Computer Science), Vol. 1576. Springer, 91--108. Google ScholarGoogle ScholarDigital LibraryDigital Library
  53. Manuel Fähndrich, Mark Aiken, Chris Hawblitzel, Orion Hodson, Galen Hunt, James R. Larus, and Steven Levi. 2006. Language support for fast and reliable message-based communication in singularity OS. In EuroSys. 177--190.Google ScholarGoogle Scholar
  54. Manuel Fähndrich and Robert DeLine. 2002. Adoption and focus: Practical linear types for imperative programming. In Programming Language Design and Implementation (PLDI). 13--24. Google ScholarGoogle ScholarDigital LibraryDigital Library
  55. Colin S. Gordon, Matthew J. Parkinson, Jared Parsons, Aleks Bromfield, and Joe Duffy. 2012. Uniqueness and reference immutability for safe parallelism. In Object-O riented Programming, Systems, Languages, and Applications (OOPSLA). 21--40. Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. Alexey Gotsman, Josh Berdine, Byron Cook, Noam Rinetzky, and Mooly Sagiv. 2007. Local Reasoning for Storable Locks and Threads. Technical Report MSR-TR-2007-39. Microsoft Research.Google ScholarGoogle Scholar
  57. Armaël Guéneau, François Pottier, and Jonathan Protzenko. 2013. The ins and outs of iteration in Mezzo. Higher-Order Programming and Effects (HOPE). (2013). http://goo.gl/NrgKc4.Google ScholarGoogle Scholar
  58. Christian Haack, Marieke Huisman, and Clément Hurlin. 2008. Reasoning about Java’s reentrant locks. In Asian Symposium on Programming Languages and Systems (APLAS) (Lecture Notes in Computer Science), Vol. 5356. Springer, Berlin, 171--187. Google ScholarGoogle ScholarDigital LibraryDigital Library
  59. Christian Haack and Clément Hurlin. 2009. Resource usage protocols for iterators. J. Object Technol. 8, 4 (2009), 55--83.Google ScholarGoogle ScholarCross RefCross Ref
  60. Stefan Heule, K. Rustan, M. Leino, Peter Müller, and Alexander J. Summers. 2013. Abstract read permissions: Fractional permissions without the fractions. In Verification, Model Checking and Abstract Interpretation (VMCAI) (Lecture Notes in Computer Science), Vol. 7737. Springer, Berlin, 315--334. Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. Aquinas Hobor, Andrew W. Appel, and Francesco Zappa Nardelli. 2008. Oracle semantics for concurrent separation logic. In European Symposium on Programming (ESOP) (Lecture Notes in Computer Science), Vol. 4960. Springer, Berlin, 353--367. Google ScholarGoogle ScholarDigital LibraryDigital Library
  62. Bart Jacobs, Dragan Bosnacki, and Ruurd Kuipe. 2015. Modular termination verification. In European Conference on Object-Oriented Programming (ECOOP) (Leibniz International Proceedings in Informatics). 99--1023.Google ScholarGoogle Scholar
  63. Bart Jacobs and Frank Piessens. 2008. The VeriFast Program Verifier. Technical Report CW-520. Department of Computer Science, Katholieke Universiteit Leuven.Google ScholarGoogle Scholar
  64. Neelakantan R. Krishnaswami, Jonathan Aldrich, Lars Birkedal, Kasper Svendsen, and Alexandre Buisse. 2009. Design patterns in separation logic. In Types in Language Design and Implementation (TLDI). 105--116. Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. James Richard Larus. 1989. Restructuring Symbolic Programs for Concurrent Execution on Multiprocessors. Ph.D. Dissertation. EECS Department, University of California, Berkeley. Technical Report UCB/CSD-89-502. Google ScholarGoogle ScholarDigital LibraryDigital Library
  66. K. Rustan, M. Leino, and Peter Müller. 2009. A basis for verifying multi-threaded programs. In European Symposium on Programming (ESOP) (Lecture Notes in Computer Science), Vol. 5502. Springer, Berlin, 378--393. Google ScholarGoogle ScholarDigital LibraryDigital Library
  67. K. Rustan, M. Leino, Peter Müller, and Jan Smans. 2010. Deadlock-free channels and locks. In European Symposium on Programming (ESOP) (Lecture Notes in Computer Science), Vol. 6012. Springer, Berlin, 407--426. Google ScholarGoogle ScholarDigital LibraryDigital Library
  68. Toshiyuki Maeda, Haruki Sato, and Akinori Yonezawa. 2011. Extended alias type system using separating implication. In Types in Language Design and Implementation (TLDI). 29--42. Google ScholarGoogle ScholarDigital LibraryDigital Library
  69. Karl Mazurak, Jianzhou Zhao, and Steve Zdancewic. 2010. Lightweight linear types in system F°. In Types in Language Design and Implementation (TLDI). 77--88. Google ScholarGoogle ScholarDigital LibraryDigital Library
  70. Robin Milner. 1978. A theory of type polymorphism in programming. J. Comput. System Sci. 17, 3 (1978), 348--375.Google ScholarGoogle Scholar
  71. Yasuhiko Minamide. 1998. A functional representation of data structures with a hole. In Pr inciples of Programming Languages (POPL). 75--84. Google ScholarGoogle ScholarDigital LibraryDigital Library
  72. Peter D. Mosses. 2004. Modul ar structural operational semantics. J. Logic Algebr. Program. 60--61 (2004), 195--228.Google ScholarGoogle Scholar
  73. Peter Müller and Arsenii Rudich. 2007. Ownership transfer in universe types. In Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 461--478. Google ScholarGoogle ScholarDigital LibraryDigital Library
  74. Karl Naden, Robert Bocchino, Jonathan Aldrich, and Kevin Bierhoff. 2012. A type system for borrowing permissions. In Principles of Programming Languages (POPL). 557--570. Google ScholarGoogle ScholarDigital LibraryDigital Library
  75. Aleksandar Nanevski, Viktor Vafeiadis, and Josh Berdine. 2010. Structuring the verification of heap-manipulating programs. In Principles of Programming Languages (POPL). 261--274. Google ScholarGoogle ScholarDigital LibraryDigital Library
  76. Juan Antonio Navarro Pérez and Andrey Rybalchenko. 2011. Separation logic + superposition calculus &equals; heap theorem prover. In Programming Language Design and Implementation (PLDI). 556--566. Google ScholarGoogle ScholarDigital LibraryDigital Library
  77. Peter W. O’Hearn. 2007. Resources, concurrency and local reasoning. Theoretical Computer Science 375, 1--3 (2007), 271--307. Google ScholarGoogle ScholarDigital LibraryDigital Library
  78. Simon Peyton Jones and Philip Wadler. 1993. Imperative functional programming. In Principles of Programming Languages (POPL). 71--84. Google ScholarGoogle ScholarDigital LibraryDigital Library
  79. Ruzica Piskac, Thomas Wies, and Damien Zufferey. 2013. Automating separation logic using SMT. In Computer Aided Verification (Lecture Notes in Computer Science), Vol. 8044. Springer, Berlin, 773--789.Google ScholarGoogle Scholar
  80. François Pottier. 2008. Hiding local state in direct style: A higher-order anti-frame rule. In Logic in Computer Science (LICS). 331--340. Google ScholarGoogle ScholarDigital LibraryDigital Library
  81. François Pottier. 2013. Syntactic soundness proof of a type-and-capability system with hidden state. J. Funct. Program. 23, 1 (2013), 38--144. Google ScholarGoogle ScholarDigital LibraryDigital Library
  82. François Pottier and Jonathan Protzenko. 2013. Programming with permissions in Mezzo. In International Conference on Functional Programming (ICFP). 173--184. Google ScholarGoogle ScholarDigital LibraryDigital Library
  83. François Pottier and Jonathan Protzenko. 2015. A few lessons from the Mezzo project. In Summit on Advances in Programming Languages (SNAPL).Google ScholarGoogle Scholar
  84. Jonathan Protzenko. 2014a. Mezzo: a typed language for safe effectful concurrent programs. Ph.D. Dissertation. Université Paris Diderot.Google ScholarGoogle Scholar
  85. Jonathan Protzenko. 2014b. A Mezzo sample project. (2014).Google ScholarGoogle Scholar
  86. Jonathan Protzenko. 2014c. Mezzo-web: try Mezzo in your browser. (2014).Google ScholarGoogle Scholar
  87. John C. Reynolds. 2002. Separation logic: A logic for shared mutable data structures. In Logic in Computer Science (LICS). 55--74. Google ScholarGoogle ScholarDigital LibraryDigital Library
  88. Jan Schwinghammer, Lars Birkedal, Bernhard Reus, and Hongseok Yang. 2009. Nested Hoare triples and frame rules for higher-order store. In Computer Science Logic (Lecture Notes in Computer Science), Vol. 5771. Springer, Berlin, 440--454. Google ScholarGoogle ScholarDigital LibraryDigital Library
  89. Jan Schwinghammer, Hongseok Yang, Lars Birkedal, François Pottier, and Bernhard Reus. 2010. A semantic foundation for hidden state. In Foundations of Software Science and Computation Structures (FOSSACS) (Lecture Notes in Computer Science), Vol. 6014. Springer, Berlin, 2--17. Google ScholarGoogle ScholarDigital LibraryDigital Library
  90. Sjaak Smetsers, Erik Barendsen, Marko C. J. D. van Eekelen, and Marinus J. Plasmeijer. 1994. Guaranteeing safe destructive updates through a type system with uniqueness information for graphs. In Dagstuhl Seminar on Graph Transformations in Computer Science (Lecture Notes in Computer Science), Vol. 776. Springer, Berlin, 358--379. Google ScholarGoogle ScholarDigital LibraryDigital Library
  91. Frederick Smith, David Walker, and Greg Morrisett. 2000. Ali as types. In European Symposium on Programming (ESOP) (Lecture Notes in Computer Science), Vol. 1782. Springer, Berlin, 366--381. Google ScholarGoogle ScholarDigital LibraryDigital Library
  92. Kasper Svendsen and Lars Birkedal. 2014. Impredi cative concurrent abstract predicates. In European Symposium on Programming (ESOP) (Lecture Notes in Computer Science), Vol. 8410. Springer, Berlin, 149--168. Google ScholarGoogle ScholarDigital LibraryDigital Library
  93. Nikhil Swamy, Michael Hicks, Greg Morrisett, Dan Grossman, and Trevor Jim. 2006. Sa fe manual memory management in cyclone. Sci. Comput. Program. 62, 2 (2006), 122--144. Google ScholarGoogle ScholarDigital LibraryDigital Library
  94. The Mozilla foundation. 2014. The Rust programming language. (2014).Google ScholarGoogle Scholar
  95. Mads Tofte. 1988. Ope rational Semantics and Polymorphic Type Inference. Ph.D. Dissertation. University of Edinburgh.Google ScholarGoogle Scholar
  96. Mads Tofte and Jean-Pierre Talpin. 1994. Implementation of the typed call-by-value λ-calculus using a stack of regions. In Principles of Programming Languages (POPL). 188--201. Google ScholarGoogle ScholarDigital LibraryDigital Library
  97. Mads Tofte and Jean-Pierre Talpin. 1997. Re gion-based memory management. Inform. Comput. 132, 2 (1997), 109--176. Google ScholarGoogle ScholarDigital LibraryDigital Library
  98. Jesse A. Tov and Riccardo Pucella. 2011. Practic al affine types. In Principles of Programming Languages (POPL). 447--458. Google ScholarGoogle ScholarDigital LibraryDigital Library
  99. Matthew S. Tschantz and Michael D. Ernst. 2005. Javari: Adding reference immutability to Java. In Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 211--230. Google ScholarGoogle ScholarDigital LibraryDigital Library
  100. Thomas Tuerk. 2010. Local reasoning about while-loops. (2010). Unpublished.Google ScholarGoogle Scholar
  101. Aaron Turon, Derek Dreyer, and Lars Birkedal. 2013. Unifying refinement and Hoare-style reasoning in a logic for higher-order concurrency. In International Conference on Functional Programming (ICFP). 377--390. Google ScholarGoogle ScholarDigital LibraryDigital Library
  102. Viktor Vafeiadis. 2011. Concurrent separation logic and operational semantics. Electron. Notes Theor. Comput. Sci. 276 (2011), 335--351. Google ScholarGoogle ScholarDigital LibraryDigital Library
  103. Jan Vitek and Boris Bokowski. 2001. Confined types in Java. Software: Prac. Exp. 31, 6 (2001), 507--532. Google ScholarGoogle ScholarDigital LibraryDigital Library
  104. Philip Wadler. 1990. Linear types can change the world&excl; In Programming Concepts and Methods, M. Broy and C. Jones (Eds.). North Holland.Google ScholarGoogle Scholar
  105. David Walker, Karl Crary, and Greg Morrisett. 2000. Typed memory management via static capabilities. ACM Trans. Program. Lang. Syst. 22, 4 (2000), 701--771. Google ScholarGoogle ScholarDigital LibraryDigital Library
  106. David Walker and Greg Morrisett. 2000. Alias types for recursive data structures. In Types in Compilation (TIC) (Lecture Notes in Computer Science), Vol. 2071. Springer, Berlin, 177--206. Google ScholarGoogle ScholarDigital LibraryDigital Library
  107. Andrew K. Wright. 1995. Simple imperative polymorphism. Lisp Symbol. Comput. 8, 4 (1995), 343--356. Google ScholarGoogle ScholarDigital LibraryDigital Library
  108. Andrew K. Wright and Matthias Felleisen. 1994. A syntactic approach to type soundness. Inform. Comput. 115, 1 (1994), 38--94. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. The Design and Formalization of Mezzo, a Permission-Based Programming Language

                              Recommendations

                              Comments

                              Login options

                              Check if you have access through your login credentials or your institution to get full access on this article.

                              Sign in

                              Full Access

                              • Published in

                                cover image ACM Transactions on Programming Languages and Systems
                                ACM Transactions on Programming Languages and Systems  Volume 38, Issue 4
                                October 2016
                                204 pages
                                ISSN:0164-0925
                                EISSN:1558-4593
                                DOI:10.1145/2982214
                                Issue’s Table of Contents

                                Copyright © 2016 ACM

                                Publisher

                                Association for Computing Machinery

                                New York, NY, United States

                                Publication History

                                • Published: 2 August 2016
                                • Accepted: 1 October 2015
                                • Revised: 1 July 2015
                                • Received: 1 July 2014
                                Published in toplas Volume 38, Issue 4

                                Permissions

                                Request permissions about this article.

                                Request Permissions

                                Check for updates

                                Qualifiers

                                • research-article
                                • Research
                                • Refereed

                              PDF Format

                              View or Download as a PDF file.

                              PDF

                              eReader

                              View online with eReader.

                              eReader
                              About Cookies On This Site

                              We use cookies to ensure that we give you the best experience on our website.

                              Learn more

                              Got it!