Hostname: page-component-6766d58669-l4t7p Total loading time: 0 Render date: 2026-05-14T14:24:11.254Z Has data issue: false hasContentIssue false

Dynamic rebinding for marshalling and update, via redex-time and destruct-time reduction

Published online by Cambridge University Press:  17 October 2007

PETER SEWELL
Affiliation:
University of Cambridge (e-mail: Peter.Sewell@cl.cam.ac.uk)
GARETH STOYLE
Affiliation:
University of Cambridge (e-mail: gareth@almostlogical.org)
MICHAEL HICKS
Affiliation:
University of Maryland, College Park (e-mail: mwh@cs.umd.edu)
GAVIN BIERMAN
Affiliation:
Microsoft Research, Cambridge (e-mail: gmb@microsoft.com)
KEITH WANSBROUGH
Affiliation:
Data Connection Ltd., Edinburgh (e-mail: Keith.Wansbrough@lochan.org)
Rights & Permissions [Opens in a new window]

Abstract

Core share and HTML view are not available for this content. However, as you have access to this content, a full PDF is available via the 'Save PDF' action button.

Most programming languages adopt static binding, but for distributed programming an exclusive reliance on static binding is too restrictive: dynamic binding is required in various guises, for example, when a marshalled value is received from the network, containing identifiers that must be rebound to local resources. Typically, it is provided only by ad hoc mechanisms that lack clean semantics. In this paper, we adopt a foundational approach, developing core dynamic rebinding mechanisms as extensions to the simply typed call-by-value λ calculus. To do so, we must first explore refinements of the call-by-value reduction strategy that delay instantiation, to ensure computations make use of the most recent versions of rebound definitions. We introduce redex-time and destruct-time strategies. The latter forms the basis for a λmarsh calculus that supports dynamic rebinding of marshalled values, while remaining as far as possible statically typed. We sketch an extension of λmarsh with concurrency and communication, giving examples showing how wrappers for encapsulating untrusted code can be expressed. Finally, we show that a high-level semantics for dynamic updating can also be based on the destruct-time strategy, defining a λupdate calculus with simple primitives to provide type-safe updating of running code. We show how the ideas of this simple calculus extend to more real-world, module-level dynamic updating in the style of Erlang. We thereby establish primitives and a common semantic foundation for a variety of real-world dynamic rebinding requirements.

Information

Type
Articles
Copyright
Copyright © Cambridge University Press 2007
Submit a response

Discussions

No Discussions have been published for this article.