@inproceedings{acute, title = {Acute: High-Level Programming Language Design for Distributed Computation}, author = { Peter Sewell and James J. Leifer and Keith Wansbrough and Francesco Zappa Nardelli and Mair Allen-Williams and Pierre Habouzit and Viktor Vafeiadis }, booktitle = {Proceedings of ICFP 2005: International Conference on Functional Programming (Tallinn)}, year = {2005}, month = sep, note = {To appear.}, abstract = { Existing languages provide good support for typeful programming of standalone programs. In a distributed system, however, there may be interaction between multiple instances of many distinct pro- grams, sharing some (but not necessarily all) of their module struc- ture, and with some instances rebuilt with new versions of certain modules as time goes on. In this paper we discuss programming- language support for such systems, focussing on their typing and naming issues. We describe an experimental language, Acute, which extends an ML core to support distributed development, deployment, and execution, allowing type-safe interaction between separately-built programs. The main features are: (1) type-safe marshalling of ar- bitrary values; (2) type names that are generated (freshly and by hashing) to ensure that type equality tests suffice to protect the in- variants of abstract types, across the entire distributed system; (3) expression-level names generated to ensure that name equality tests suffice for type-safety of associated values, e.g. values carried on named channels; (4) controlled dynamic rebinding of marshalled values to local resources; and (5) thunkification of threads and mu- texes to support computation mobility. These features are a large part of what is needed for typeful distributed programming. They are a relatively lightweight exten- sion of ML, should be efficiently implementable, and are expressive enough to enable a wide variety of distributed infrastructure layers to be written as simple library code above the byte-string network and persistent store APIs. This disentangles the language runtime from communication intricacies. This paper highlights the main de- sign choices in Acute. It is supported by a full language definition (of typing, compilation, and operational semantics), by a prototype implementation, and by example distribution libraries. }, notes = { Acute is designed as an experimental platform to explore the design-space of type-safe distributed programming languages. As a bonus it was written in Fresh O'Caml to gain more experience of using Fresh O'Caml in larger projects. In contrast to systems like Obliq, Facile, JoCaml (and reminiscent of Nomadic Pict's two-level approach to communication), Acute does not specify a particular communication style in the runtime. Instead the system simply provides marshal and unmarshal to and from byte strings. Lots of interesting ideas in here. }, pdf = {\url{http://www.cl.cam.ac.uk/users/pes20/acute/acute2-short.pdf}}, bibtexurl = {http://www.recoil.org/~djs/bibtex/acute.bib} }