20 results on '"Hammer, Matthew"'
Search Results
2. Fungi: Typed incremental computation with names
- Author
-
Hammer, Matthew A., Dunfield, Jana, Headley, Kyle, Narasimhamurthy, Monal, Economou, Dimitrios J., Hammer, Matthew A., Dunfield, Jana, Headley, Kyle, Narasimhamurthy, Monal, and Economou, Dimitrios J.
- Abstract
Incremental computations attempt to exploit input similarities over time, reusing work that is unaffected by input changes. To maximize this reuse in a general-purpose programming setting, programmers need a mechanism to identify dynamic allocations (of data and subcomputations) that correspond over time. We present Fungi, a typed functional language for incremental computation with names. Unlike prior general-purpose languages for incremental computing, Fungi's notion of names is formal, general, and statically verifiable. Fungi's type-and-effect system permits the programmer to encode (program-specific) local invariants about names, and to use these invariants to establish global uniqueness for their composed programs, the property of using names correctly. We prove that well-typed Fungi programs respect global uniqueness. We derive a bidirectional version of the type and effect system, and we have implemented a prototype of Fungi in Rust. We apply Fungi to a library of incremental collections, showing that it is expressive in practice.
- Published
- 2018
3. Live Functional Programming with Typed Holes
- Author
-
Omar, Cyrus, Voysey, Ian, Chugh, Ravi, Hammer, Matthew A., Omar, Cyrus, Voysey, Ian, Chugh, Ravi, and Hammer, Matthew A.
- Abstract
This paper develops a dynamic semantics for incomplete functional programs, starting from the static semantics developed in recent work on Hazelnut. We model incomplete functional programs as expressions with holes, with empty holes standing for missing expressions or types, and non-empty holes operating as membranes around static and dynamic type inconsistencies. Rather than aborting when evaluation encounters any of these holes as in some existing systems, evaluation proceeds around holes, tracking the closure around each hole instance as it flows through the remainder of the program. Editor services can use the information in these hole closures to help the programmer develop and confirm their mental model of the behavior of the complete portions of the program as they decide how to fill the remaining holes. Hole closures also enable a fill-and-resume operation that avoids the need to restart evaluation after edits that amount to hole filling. Formally, the semantics borrows machinery from both gradual type theory (which supplies the basis for handling unfilled type holes) and contextual modal type theory (which supplies a logical basis for hole closures), combining these and developing additional machinery necessary to continue evaluation past holes while maintaining type safety. We have mechanized the metatheory of the core calculus, called Hazelnut Live, using the Agda proof assistant. We have also implemented these ideas into the Hazel programming environment. The implementation inserts holes automatically, following the Hazelnut edit action calculus, to guarantee that every editor state has some (possibly incomplete) type. Taken together with this paper's type safety property, the result is a proof-of-concept live programming environment where rich dynamic feedback is truly available without gaps, i.e. for every reachable editor state., Comment: Published in PACMPL issue POPL 2019. Please cite the conference paper!
- Published
- 2018
4. Adapton: Composable, Demand-Driven Incremental Computation
- Author
-
Hammer, Matthew A., Hammer, Matthew A., Phang, Khoo Yit, Hicks, Michael, Foster, Jeffrey S., Hammer, Matthew A., Hammer, Matthew A., Phang, Khoo Yit, Hicks, Michael, and Foster, Jeffrey S.
- Abstract
Many researchers have proposed programming languages that support incremental computation (IC), which allows programs to be efficiently re-executed after a small change to the input. However, existing implementations of such languages have two important drawbacks. First, recomputation is oblivious to specific demands on the program output; that is, if a program input changes, all dependencies will be recomputed, even if an observer no longer requires certain outputs. Second, programs are made incremental as a unit, with little or no support for reusing results outside of their original context, e.g., when reordered. To address these problems, we present lambdaCDDIC, a core calculus that applies a demand-driven semantics to incremental computation, tracking changes in a hierarchical fashion in a novel demanded computation graph. lambdaCDDIC also formalizes an explicit separation between inner, incremental computations and outer observers. This combination ensures lambdaCDDIC programs only recompute computations as demanded by observers, and allows inner computations to be composed more freely. We describe an algorithm for implementing lambdaCDDIC efficiently, and we present AdaptOn, a library for writing lambdaCDDIC-style programs in OCaml. We evaluated AdaptOn on a range of benchmarks, and found that it provides reliable speedups, and in many cases dramatically outperforms prior state-of-the-art IC approaches.
- Published
- 2013
5. Adapton: Composable, Demand-Driven Incremental Computation
- Author
-
Hammer, Matthew A., Hammer, Matthew A., Phang, Khoo Yit, Hicks, Michael, Foster, Jeffrey S., Hammer, Matthew A., Hammer, Matthew A., Phang, Khoo Yit, Hicks, Michael, and Foster, Jeffrey S.
- Abstract
Many researchers have proposed programming languages that support incremental computation (IC), which allows programs to be efficiently re-executed after a small change to the input. However, existing implementations of such languages have two important drawbacks. First, recomputation is oblivious to specific demands on the program output; that is, if a program input changes, all dependencies will be recomputed, even if an observer no longer requires certain outputs. Second, programs are made incremental as a unit, with little or no support for reusing results outside of their original context, e.g., when reordered. To address these problems, we present lambdaCDDIC, a core calculus that applies a demand-driven semantics to incremental computation, tracking changes in a hierarchical fashion in a novel demanded computation graph. lambdaCDDIC also formalizes an explicit separation between inner, incremental computations and outer observers. This combination ensures lambdaCDDIC programs only recompute computations as demanded by observers, and allows inner computations to be composed more freely. We describe an algorithm for implementing lambdaCDDIC efficiently, and we present AdaptOn, a library for writing lambdaCDDIC-style programs in OCaml. We evaluated AdaptOn on a range of benchmarks, and found that it provides reliable speedups, and in many cases dramatically outperforms prior state-of-the-art IC approaches.
- Published
- 2013
6. Toward Semantic Foundations for Program Editors
- Author
-
Omar, Cyrus, Voysey, Ian, Hilton, Michael, Sunshine, Joshua, Le Goues, Claire, Aldrich, Jonathan, Hammer, Matthew A., Omar, Cyrus, Voysey, Ian, Hilton, Michael, Sunshine, Joshua, Le Goues, Claire, Aldrich, Jonathan, and Hammer, Matthew A.
- Abstract
Programming language definitions assign formal meaning to complete programs. Programmers, however, spend a substantial amount of time interacting with incomplete programs - programs with holes, type inconsistencies and binding inconsistencies - using tools like program editors and live programming environments (which interleave editing and evaluation). Semanticists have done comparatively little to formally characterize (1) the static and dynamic semantics of incomplete programs; (2) the actions available to programmers as they edit and inspect incomplete programs; and (3) the behavior of editor services that suggest likely edit actions to the programmer based on semantic information extracted from the incomplete program being edited, and from programs that the system has encountered in the past. This paper serves as a vision statement for a research program that seeks to develop these "missing" semantic foundations. Our hope is that these contributions, which will take the form of a series of simple formal calculi equipped with a tractable metatheory, will guide the design of a variety of current and future interactive programming tools, much as various lambda calculi have guided modern language designs. Our own research will apply these principles in the design of Hazel, an experimental live lab notebook programming environment designed for data science tasks. We plan to co-design the Hazel language with the editor so that we can explore concepts such as edit-time semantic conflict resolution mechanisms and mechanisms that allow library providers to install library-specific editor services.
- Published
- 2017
- Full Text
- View/download PDF
7. Programming Language Techniques for Incremental and Reactive Computing (Dagstuhl Seminar 16402)
- Author
-
Camil Demetrescu and Sebastian Erdweg and Matthew A. Hammer and Shriram Krishnamurthi, Demetrescu, Camil, Erdweg, Sebastian, Hammer, Matthew A., Krishnamurthi, Shriram, Camil Demetrescu and Sebastian Erdweg and Matthew A. Hammer and Shriram Krishnamurthi, Demetrescu, Camil, Erdweg, Sebastian, Hammer, Matthew A., and Krishnamurthi, Shriram
- Abstract
Incremental computations are those that process input changes faster than naive computation that runs from scratch, and reactive computations consist of interactive behavior that varies over time. Due to the importance and prevalence of incremental, reactive systems, ad hoc variants of incremental and reactive computation are ubiquitous in modern software systems. In response to this reality, the PL research community has worked for several decades to advance new languages for systems that interface with a dynamically-changing environment. In this space, researchers propose new general-purpose languages and algorithms to express and implement efficient, dynamic behavior, in the form of incremental and reactive language systems. While these research lines continue to develop successfully, this work lacks a shared community that synthesizes a collective discussion about common motivations, alternative techniques, current results and future challenges. To overcome this lack of community, this seminar will work towards building one, by strengthening existing research connections and by forging new ones. Developing a shared culture is critical to the future advancement of incremental and reactive computing in modern PL research, and in turn, this PL research is critical to developing the efficient, understandable interactive systems of the future.
- Published
- 2017
- Full Text
- View/download PDF
8. Toward Semantic Foundations for Program Editors
- Author
-
Cyrus Omar and Ian Voysey and Michael Hilton and Joshua Sunshine and Claire Le Goues and Jonathan Aldrich and Matthew A. Hammer, Omar, Cyrus, Voysey, Ian, Hilton, Michael, Sunshine, Joshua, Le Goues, Claire, Aldrich, Jonathan, Hammer, Matthew A., Cyrus Omar and Ian Voysey and Michael Hilton and Joshua Sunshine and Claire Le Goues and Jonathan Aldrich and Matthew A. Hammer, Omar, Cyrus, Voysey, Ian, Hilton, Michael, Sunshine, Joshua, Le Goues, Claire, Aldrich, Jonathan, and Hammer, Matthew A.
- Abstract
Programming language definitions assign formal meaning to complete programs. Programmers, however, spend a substantial amount of time interacting with incomplete programs - programs with holes, type inconsistencies and binding inconsistencies - using tools like program editors and live programming environments (which interleave editing and evaluation). Semanticists have done comparatively little to formally characterize (1) the static and dynamic semantics of incomplete programs; (2) the actions available to programmers as they edit and inspect incomplete programs; and (3) the behavior of editor services that suggest likely edit actions to the programmer based on semantic information extracted from the incomplete program being edited, and from programs that the system has encountered in the past. This paper serves as a vision statement for a research program that seeks to develop these "missing" semantic foundations. Our hope is that these contributions, which will take the form of a series of simple formal calculi equipped with a tractable metatheory, will guide the design of a variety of current and future interactive programming tools, much as various lambda calculi have guided modern language designs. Our own research will apply these principles in the design of Hazel, an experimental live lab notebook programming environment designed for data science tasks. We plan to co-design the Hazel language with the editor so that we can explore concepts such as edit-time semantic conflict resolution mechanisms and mechanisms that allow library providers to install library-specific editor services.
- Published
- 2017
- Full Text
- View/download PDF
9. Programming Language Techniques for Incremental and Reactive Computing (Dagstuhl Seminar 16402)
- Author
-
Camil Demetrescu and Sebastian Erdweg and Matthew A. Hammer and Shriram Krishnamurthi, Demetrescu, Camil, Erdweg, Sebastian, Hammer, Matthew A., Krishnamurthi, Shriram, Camil Demetrescu and Sebastian Erdweg and Matthew A. Hammer and Shriram Krishnamurthi, Demetrescu, Camil, Erdweg, Sebastian, Hammer, Matthew A., and Krishnamurthi, Shriram
- Abstract
Incremental computations are those that process input changes faster than naive computation that runs from scratch, and reactive computations consist of interactive behavior that varies over time. Due to the importance and prevalence of incremental, reactive systems, ad hoc variants of incremental and reactive computation are ubiquitous in modern software systems. In response to this reality, the PL research community has worked for several decades to advance new languages for systems that interface with a dynamically-changing environment. In this space, researchers propose new general-purpose languages and algorithms to express and implement efficient, dynamic behavior, in the form of incremental and reactive language systems. While these research lines continue to develop successfully, this work lacks a shared community that synthesizes a collective discussion about common motivations, alternative techniques, current results and future challenges. To overcome this lack of community, this seminar will work towards building one, by strengthening existing research connections and by forging new ones. Developing a shared culture is critical to the future advancement of incremental and reactive computing in modern PL research, and in turn, this PL research is critical to developing the efficient, understandable interactive systems of the future.
- Published
- 2017
- Full Text
- View/download PDF
10. Toward Semantic Foundations for Program Editors
- Author
-
Omar, Cyrus, Voysey, Ian, Hilton, Michael, Sunshine, Joshua, Goues, Claire Le, Aldrich, Jonathan, Hammer, Matthew A., Omar, Cyrus, Voysey, Ian, Hilton, Michael, Sunshine, Joshua, Goues, Claire Le, Aldrich, Jonathan, and Hammer, Matthew A.
- Abstract
Programming language definitions assign formal meaning to complete programs. Programmers, however, spend a substantial amount of time interacting with incomplete programs -- programs with holes, type inconsistencies and binding inconsistencies -- using tools like program editors and live programming environments (which interleave editing and evaluation). Semanticists have done comparatively little to formally characterize (1) the static and dynamic semantics of incomplete programs; (2) the actions available to programmers as they edit and inspect incomplete programs; and (3) the behavior of editor services that suggest likely edit actions to the programmer based on semantic information extracted from the incomplete program being edited, and from programs that the system has encountered in the past. As such, each tool designer has largely been left to develop their own ad hoc heuristics. This paper serves as a vision statement for a research program that seeks to develop these "missing" semantic foundations. Our hope is that these contributions, which will take the form of a series of simple formal calculi equipped with a tractable metatheory, will guide the design of a variety of current and future interactive programming tools, much as various lambda calculi have guided modern language designs. Our own research will apply these principles in the design of Hazel, an experimental live lab notebook programming environment designed for data science tasks. We plan to co-design the Hazel language with the editor so that we can explore concepts such as edit-time semantic conflict resolution mechanisms and mechanisms that allow library providers to install library-specific editor services., Comment: The 2nd Summit on Advances in Programming Languages (SNAPL 2017)
- Published
- 2017
11. Languages of Play: Towards semantic foundations for game interfaces
- Author
-
Martens, Chris, Hammer, Matthew A., Martens, Chris, and Hammer, Matthew A.
- Abstract
Formal models of games help us account for and predict behavior, leading to more robust and innovative designs. While the games research community has proposed many formalisms for both the "game half" (game models, game description languages) and the "human half" (player modeling) of a game experience, little attention has been paid to the interface between the two, particularly where it concerns the player expressing her intent toward the game. We describe an analytical and computational toolbox based on programming language theory to examine the phenomenon sitting between control schemes and game rules, which we identify as a distinct player intent language for each game.
- Published
- 2017
12. Refinement types for precisely named cache locations
- Author
-
Hammer, Matthew A., Dunfield, Jana, Economou, Dimitrios J., Narasimhamurthy, Monal, Hammer, Matthew A., Dunfield, Jana, Economou, Dimitrios J., and Narasimhamurthy, Monal
- Abstract
Many programming language techniques for incremental computation employ programmer-specified names for cached information. At runtime, each name identifies a "cache location" for a dynamic data value or a sub-computation; in sum, these cache location choices guide change propagation and incremental (re)execution. We call a cache location name precise when it identifies at most one value or subcomputation; we call all other names imprecise, or ambiguous. At a minimum, cache location names must be precise to ensure that change propagation works correctly; yet, reasoning statically about names in incremental programs remains an open problem. As a first step, this paper defines and solves the precise name problem, where we verify that incremental programs with explicit names use them precisely. To do so, we give a refinement type and effect system, and prove it sound (every well-typed program uses names precisely). We also demonstrate that this type system is expressive by verifying example programs that compute over efficient representations of incremental sequences and sets. Beyond verifying these programs, our type system also describes their dynamic naming strategies, e.g., for library documentation purposes.
- Published
- 2016
13. miniAdapton: A Minimal Implementation of Incremental Computation in Scheme
- Author
-
Fisher, Dakota, Hammer, Matthew A., Byrd, William, Might, Matthew, Fisher, Dakota, Hammer, Matthew A., Byrd, William, and Might, Matthew
- Abstract
We describe a complete Scheme implementation of miniAdapton, which implements the core functionality of the Adapton system for incremental computation (also known as self-adjusting computation). Like Adapton, miniAdapton allows programmers to safely combine mutation and memoization. miniAdapton is built on top of an even simpler system, microAdapton. Both miniAdapton and microAdapton are designed to be easy to understand, extend, and port to host languages other than Scheme. We also present adapton variables, a new interface in Adapton for variables intended to represent expressions.
- Published
- 2016
14. A Vision for Online Verification-Validation
- Author
-
Hammer, Matthew A., Chang, Bor-Yuh Evan, Van Horn, David, Hammer, Matthew A., Chang, Bor-Yuh Evan, and Van Horn, David
- Abstract
Today's programmers face a false choice between creating software that is extensible and software that is correct. Specifically, dynamic languages permit software that is richly extensible (via dynamic code loading, dynamic object extension, and various forms of reflection), and today's programmers exploit this flexibility to "bring their own language features" to enrich extensible languages (e.g., by using common JavaScript libraries). Meanwhile, such library-based language extensions generally lack enforcement of their abstractions, leading to programming errors that are complex to avoid and predict. To offer verification for this extensible world, we propose online verification-validation (OVV), which consists of language and VM design that enables a "phaseless" approach to program analysis, in contrast to the standard static-dynamic phase distinction. Phaseless analysis freely interposes abstract interpretation with concrete execution, allowing analyses to use dynamic (concrete) information to prove universal (abstract) properties about future execution. In this paper, we present a conceptual overview of OVV through a motivating example program that uses a hypothetical database library. We present a generic semantics for OVV, and an extension to this semantics that offers a simple gradual type system for the database library primitives. The result of instantiating this gradual type system in an OVV setting is a checker that can progressively type successive continuations of the program until a continuation is fully verified. To evaluate the proposed vision of OVV for this example, we implement the VM semantics (in Rust), and show that this design permits progressive typing in this manner.
- Published
- 2016
15. The Random Access Zipper: Simple, Purely-Functional Sequences
- Author
-
Headley, Kyle, Hammer, Matthew A., Headley, Kyle, and Hammer, Matthew A.
- Abstract
We introduce the Random Access Zipper (RAZ), a simple, purely-functional data structure for editable sequences. A RAZ combines the structure of a zipper with that of a tree: like a zipper, edits at the cursor require constant time; by leveraging tree structure, relocating the edit cursor in the sequence requires logarithmic time. While existing data structures provide these time bounds, none do so with the same simplicity and brevity of code as the RAZ. The simplicity of the RAZ provides the opportunity for more programmers to extend the structure to their own needs, and we provide some suggestions for how to do so.
- Published
- 2016
16. Hazelnut: A Bidirectionally Typed Structure Editor Calculus
- Author
-
Omar, Cyrus, Voysey, Ian, Hilton, Michael, Aldrich, Jonathan, Hammer, Matthew A., Omar, Cyrus, Voysey, Ian, Hilton, Michael, Aldrich, Jonathan, and Hammer, Matthew A.
- Abstract
Structure editors allow programmers to edit the tree structure of a program directly. This can have cognitive benefits, particularly for novice and end-user programmers. It also simplifies matters for tool designers, because they do not need to contend with malformed program text. This paper defines Hazelnut, a structure editor based on a small bidirectionally typed lambda calculus extended with holes and a cursor. Hazelnut goes one step beyond syntactic well-formedness: its edit actions operate over statically meaningful incomplete terms. Naively, this would force the programmer to construct terms in a rigid "outside-in" manner. To avoid this problem, the action semantics automatically places terms assigned a type that is inconsistent with the expected type inside a hole. This safely defers the type consistency check until the term inside the hole is finished. Hazelnut is a foundational type-theoretic account of typed structure editing, rather than an end-user tool itself. To that end, we describe how Hazelnut's rich metatheory, which we have mechanized in Agda, guides the definition of an extension to the calculus. We also discuss various plausible evaluation strategies for terms with holes, and in so doing reveal connections with gradual typing and contextual modal type theory, the Curry-Howard interpretation of contextual modal logic. Finally, we discuss how Hazelnut's semantics lends itself to implementation as a functional reactive program. Our reference implementation is written using js_of_ocaml.
- Published
- 2016
- Full Text
- View/download PDF
17. Incremental Computation with Names
- Author
-
Hammer, Matthew A., Dunfield, Jana, Headley, Kyle, Labich, Nicholas, Foster, Jeffrey S., Hicks, Michael, Van Horn, David, Hammer, Matthew A., Dunfield, Jana, Headley, Kyle, Labich, Nicholas, Foster, Jeffrey S., Hicks, Michael, and Van Horn, David
- Abstract
Over the past thirty years, there has been significant progress in developing general-purpose, language-based approaches to incremental computation, which aims to efficiently update the result of a computation when an input is changed. A key design challenge in such approaches is how to provide efficient incremental support for a broad range of programs. In this paper, we argue that first-class names are a critical linguistic feature for efficient incremental computation. Names identify computations to be reused across differing runs of a program, and making them first class gives programmers a high level of control over reuse. We demonstrate the benefits of names by presenting NOMINAL ADAPTON, an ML-like language for incremental computation with names. We describe how to use NOMINAL ADAPTON to efficiently incrementalize several standard programming patterns -- including maps, folds, and unfolds -- and show how to build efficient, incremental probabilistic trees and tries. Since NOMINAL ADAPTON's implementation is subtle, we formalize it as a core calculus and prove it is from-scratch consistent, meaning it always produces the same answer as simply re-running the computation. Finally, we demonstrate that NOMINAL ADAPTON can provide large speedups over both from-scratch computation and ADAPTON, a previous state-of-the-art incremental computation system., Comment: OOPSLA '15, October 25-30, 2015, Pittsburgh, PA, USA
- Published
- 2015
- Full Text
- View/download PDF
18. Wysteria: A Programming Language for Generic, Mixed-Mode Multiparty Computations
- Author
-
Rastogi, Aseem, Rastogi, Aseem, Hammer, Matthew A., Hicks, Michael, Rastogi, Aseem, Rastogi, Aseem, Hammer, Matthew A., and Hicks, Michael
- Abstract
In a Secure Multiparty Computation (SMC), mutually distrusting parties use cryptographic techniques to cooperatively compute over their private data; in the process each party learns only explicitly revealed outputs. In this paper, we present Wysteria, a high-level programming language for writing SMCs. As with past languages, like Fairplay, Wysteria compiles secure computations to circuits that are executed by an underlying engine. Unlike past work, Wysteria provides support for mixed-mode programs, which combine local, private computations with synchronous SMCs. Wysteria complements a standard feature set with built-in support for secret shares and with wire bundles, a new abstraction that supports generic n-party computations. We have formalized Wysteria, its refinement type system, and its operational semantics. We show that Wysteria programs have an easy-to-understand single-threaded interpretation and prove that this view corresponds to the actual multi-threaded semantics. We also prove type soundness, a property we show has security ramifications, namely that information about one party's data can only be revealed to another via (agreed upon) secure computations. We have implemented Wysteria, and used it to program a variety of interesting SMC protocols from the literature, as well as several new ones. We find that Wysteria's performance is competitive with prior approaches while making programming far easier, and more trustworthy.
- Published
- 2014
19. Wysteria: A Programming Language for Generic, Mixed-Mode Multiparty Computations
- Author
-
Rastogi, Aseem, Rastogi, Aseem, Hammer, Matthew A., Hicks, Michael, Rastogi, Aseem, Rastogi, Aseem, Hammer, Matthew A., and Hicks, Michael
- Abstract
In a Secure Multiparty Computation (SMC), mutually distrusting parties use cryptographic techniques to cooperatively compute over their private data; in the process each party learns only explicitly revealed outputs. In this paper, we present Wysteria, a high-level programming language for writing SMCs. As with past languages, like Fairplay, Wysteria compiles secure computations to circuits that are executed by an underlying engine. Unlike past work, Wysteria provides support for mixed-mode programs, which combine local, private computations with synchronous SMCs. Wysteria complements a standard feature set with built-in support for secret shares and with wire bundles, a new abstraction that supports generic n-party computations. We have formalized Wysteria, its refinement type system, and its operational semantics. We show that Wysteria programs have an easy-to-understand single-threaded interpretation and prove that this view corresponds to the actual multi-threaded semantics. We also prove type soundness, a property we show has security ramifications, namely that information about one party's data can only be revealed to another via (agreed upon) secure computations. We have implemented Wysteria, and used it to program a variety of interesting SMC protocols from the literature, as well as several new ones. We find that Wysteria's performance is competitive with prior approaches while making programming far easier, and more trustworthy.
- Published
- 2014
20. Self-Adjusting Stack Machines
- Author
-
Hammer, Matthew A., Neis, Georg, Chen, Yan, Acar, Umut A., Hammer, Matthew A., Neis, Georg, Chen, Yan, and Acar, Umut A.
- Abstract
Self-adjusting computation offers a language-based approach to writing programs that automatically respond to dynamically changing data. Recent work made significant progress in developing sound semantics and associated implementations of self-adjusting computation for high-level, functional languages. These techniques, however, do not address issues that arise for low-level languages, i.e., stack-based imperative languages that lack strong type systems and automatic memory management. In this paper, we describe techniques for self-adjusting computation which are suitable for low-level languages. Necessarily, we take a different approach than previous work: instead of starting with a high-level language with additional primitives to support self-adjusting computation, we start with a low-level intermediate language, whose semantics is given by a stack-based abstract machine. We prove that this semantics is sound: it always updates computations in a way that is consistent with full reevaluation. We give a compiler and runtime system for the intermediate language used by our abstract machine. We present an empirical evaluation that shows that our approach is efficient in practice, and performs favorably compared to prior proposals., Comment: Full version of our OOPLSA 2011 paper. Contains a couple of additional sections as well as an appendix with our proofs
- Published
- 2011
Catalog
Discovery Service for Jio Institute Digital Library
For full access to our library's resources, please sign in.