Proc. of the thirteenth spring school of the LITP on Combinators and functional programming languages
Dynamic typing in a statically typed language
ACM Transactions on Programming Languages and Systems (TOPLAS)
Tag-free garbage collection for strongly typed programming languages
PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
A calculus of mobile processes, II
Information and Computation
Manifest types, modules, and separate compilation
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A type-theoretic approach to higher-order modules with sharing
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Simple imperative polymorphism
Lisp and Symbolic Computation - Special issue on state in programming languages (part I)
Intensional polymorphism in type-erasure semantics
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Concurrent programming in ML
Pict: a programming language based on the Pi-Calculus
Proof, language, and interaction
Modules, abstract types, and distributed versioning
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
A type system for higher-order modules
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
CONCUR '96 Proceedings of the 7th International Conference on Concurrency Theory
Generativity and dynamic opacity for abstract types
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
Global abstraction-safe marshalling with hash types
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
Dynamic rebinding for marshalling and update, with destruct-time ?
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
FreshML: programming with binders made simple
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Acute: high-level programming language design for distributed computation
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Abstraction preservation and subtyping in distributed languages
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Abstraction preservation and subtyping in distributed languages
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Proceedings of the 5th international conference on Generative programming and component engineering
Melange: creating a "functional" internet
Proceedings of the 2nd ACM SIGOPS/EuroSys European Conference on Computer Systems 2007
Status report: hot pickles, and how to serve them
ML '07 Proceedings of the 2007 workshop on Workshop on ML
Practical generic programming in OCaml
ML '07 Proceedings of the 2007 workshop on Workshop on ML
Acute: High-level programming language design for distributed computation
Journal of Functional Programming
Dynamic rebinding for marshalling and update, via redex-time and destruct-time reduction
Journal of Functional Programming
A secure compiler for session abstractions
Journal of Computer Security - 20th IEEE Computer Security Foundations Symposium (CSF)
ACM Transactions on Programming Languages and Systems (TOPLAS)
A protocol compiler for secure sessions in ML
TGC'07 Proceedings of the 3rd conference on Trustworthy global computing
Typed first-class communication channels and mobility for concurrent scripting languages
SLE'11 Proceedings of the 4th international conference on Software Language Engineering
Typing unmarshalling without marshalling types
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
Existing ML-like languages guarantee type-safety, ensuring memory safety and protecting the invariants of abstract types, but only within single executions of single programs. Distributed programming is becoming ever more important, and should benefit even more from such guarantees. In previous work on theoretical calculi and the Acute prototype language we outlined techniques to provide them for simple languages.In this paper we put these ideas into practice, describing the HashCaml extension to the OCaml bytecode compiler, which supports type-safe and abstraction-safe marshalling, together with related naming constructs. Our contribution is threefold: (1) We show how to define globally meaningful runtime type names for key OCaml type constructs that were not covered in our previous work, dealing with the generativity issues involved: user-defined variant and record types, substructures, functors, arbitrary ascription, separate compilation, and external C functions. (2) We support marshalling within polymorphic functions by type-passing, requiring us to build compositional runtime type names and revisit the OCaml relaxed value restriction. We show that with typed marshalling one must fall back to the SML97 value restriction. (3) We show how the above can be implemented with reasonable performance as an unintrusive modification to the existing OCaml language, implementation, and standard libraries. An alpha release of HashCaml, capable of bootstrapping itself, is available, along with an example type-safe distributed communication library written in the language.