Results 1  10
of
17
An abstract monadic semantics for value recursion
 In Proceeding of the 2003 Workshop on Fixed Points in Computer Science (FICS
, 2003
"... This paper proposes an operational semantics for value recursion in the context of monadic metalanguages. Our technique for combining value recursion with computational effects works uniformly for all monads. The operational nature of our approach is related to the implementation of recursion in Sch ..."
Abstract

Cited by 20 (7 self)
 Add to MetaCart
This paper proposes an operational semantics for value recursion in the context of monadic metalanguages. Our technique for combining value recursion with computational effects works uniformly for all monads. The operational nature of our approach is related to the implementation of recursion in Scheme and its monadic version proposed by Friedman and Sabry, but it defines a different semantics and does not rely on assignments. When contrasted to the axiomatic approach proposed by Erkök and Launchbury, our semantics for the continuation monad invalidates one of the axioms, adding to the evidence that this axiom is problematic in the presence of continuations. 1
Mixin Modules and Computational Effects
, 2003
"... We define a calculus for investigating the interactions between mixin modules and computational effects, by combining the purely functional mixin calculus CMS with a monadic metalanguage supporting the two separate notions of simplification (local rewrite rules) and computation (global evaluation ab ..."
Abstract

Cited by 17 (6 self)
 Add to MetaCart
We define a calculus for investigating the interactions between mixin modules and computational effects, by combining the purely functional mixin calculus CMS with a monadic metalanguage supporting the two separate notions of simplification (local rewrite rules) and computation (global evaluation able to modify the store). This distinction is important for smoothly integrating the CMS rules (which are all local) with the rules dealing with the imperative features. In our calculus mixins...
Staged Notational Definitions
 GENERATIVE PROGRAMMING AND COMPONENT ENGINEERING (GPCE), LECTURE NOTES IN COMPUTER SCIENCE
, 2003
"... Recent work proposed defining typesafe macros via interpretation into a multistage language. The utility of this approach was illustrated with a language called MacroML, in which all type checking is carried out before macro expansion. Building on this work, the goal of this paper is to develo ..."
Abstract

Cited by 7 (3 self)
 Add to MetaCart
Recent work proposed defining typesafe macros via interpretation into a multistage language. The utility of this approach was illustrated with a language called MacroML, in which all type checking is carried out before macro expansion. Building on this work, the goal of this paper is to develop a macro language that makes it easy for programmers to reason about terms locally. We show that defining the semantics of macros in this manner helps in developing and verifying not only type systems for macro languages but also equational reasoning principles. Because the MacroML calculus is sensetive to renaming of (what appear locally to be) bound variables, we present a calculus of staged notational definitions (SND) that eliminates the renaming problem but retains MacroML's phase distinction. Additionally, SND incorporates the generality of Griffin's account of notational definitions. We exhibit a formal equational theory for SND and prove its soundness.
A Monadic Approach for Avoiding Code Duplication when Staging Memoized Functions
, 2006
"... Building program generators that do not duplicate generated code can be challenging. At the same time, code duplication can easily increase both generation time and runtime of generated programs by an exponential factor. We identify an instance of this problem that can arise when memoized functions ..."
Abstract

Cited by 7 (2 self)
 Add to MetaCart
Building program generators that do not duplicate generated code can be challenging. At the same time, code duplication can easily increase both generation time and runtime of generated programs by an exponential factor. We identify an instance of this problem that can arise when memoized functions are staged. Without addressing this problem, it would be impossible to effectively stage dynamic programming algorithms. Intuitively, direct staging undoes the effect of memoization. To solve this problem once and for all, and for any function that uses memoization, we propose a staged monadic combinator library. Experimental results confirm that the library works as expected. Preliminary results also indicate that the library is useful even when memoization is not used.
A Fresh Calculus for Name Management
 In Karsai and Visser [KV04
"... We define a basic calculus for name management, which is obtained by an appropriate combination of three ingredients: extensible records (in a simplified form), names (as in FreshML), computational types (to allow computational e#ects, including generation of fresh names). The calculus supports the ..."
Abstract

Cited by 5 (1 self)
 Add to MetaCart
We define a basic calculus for name management, which is obtained by an appropriate combination of three ingredients: extensible records (in a simplified form), names (as in FreshML), computational types (to allow computational e#ects, including generation of fresh names). The calculus supports the use of symbolic names for programming inthelarge, e.g. it subsumes Ancona and Zucca's calculus for module systems, and for metaprogramming (but not the intensional analysis of object level terms supported by FreshML), e.g. it subsumes (and improves) Nanevski and Pfenning's calculus for metaprogramming with names and necessity. Moreover, it models some aspects of Java's class loaders. 1
A fresh calculus for name management
 In Proceedings of the International Conference on Generative Programming and Component Engineering
, 2004
"... Abstract. We define a basic calculus for name management, which combines three ingredients: extensible records (in a simplified form), names (as in FreshML), computational types (to allow computational effects, including generation of fresh names). The calculus supports the use of symbolic names fo ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
(Show Context)
Abstract. We define a basic calculus for name management, which combines three ingredients: extensible records (in a simplified form), names (as in FreshML), computational types (to allow computational effects, including generation of fresh names). The calculus supports the use of symbolic names for programming inthelarge, e.g. it subsumes Ancona and Zucca’s calculus for module systems, and for metaprogramming (but not the intensional analysis of object level terms supported by FreshML), e.g. it subsumes (and improves) Nanevski and Pfenning’s calculus for metaprogramming with names and necessity. Moreover, it models some aspects of Java’s class loaders. 1
Constructive LinearTime Temporal Logic: Proof Systems and Kripke Semantics
"... In this paper we study a version of constructive lineartime temporal logic (LTL) with the “next ” temporal operator. The logic is originally due to Davies, who has shown that the proof system of the logic corresponds to a type system for bindingtime analysis via the CurryHoward isomorphism. Howev ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
(Show Context)
In this paper we study a version of constructive lineartime temporal logic (LTL) with the “next ” temporal operator. The logic is originally due to Davies, who has shown that the proof system of the logic corresponds to a type system for bindingtime analysis via the CurryHoward isomorphism. However, he did not investigate the logic itself in detail; he has proved only that the logic augmented with negation and classical reasoning is equivalent to (the “next ” fragment of) the standard formulation of classical lineartime temporal logic. We give natural deduction, sequent calculus and Hilbertstyle proof systems for constructive LTL with conjunction, disjunction and falsehood, and show that the sequent calculus enjoys cut elimination. Moreover, we also consider Kripke semantics and prove soundness and completeness. One distinguishing feature of this logic is that distributivity of the “next ” operator over disjunction “○(A ∨ B) ⊃ ○A ∨ ○B” is rejected in view of a typetheoretic interpretation. Key words: constructive lineartime temporal logic, Kripke semantics, sequent calculus, cut elimination 1.
A Calculus for Symbolic Names Management
, 2003
"... We define a basic calculus ML for manipulating symbolic names inspired by # calculi with extensible records. The resulting calculus supports the use of symbolic names for metaprogramming and programming inthelarge, it subsumes Ancona and Zucca's CMS, and partly Nanevski and Pfenning&apo ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
We define a basic calculus ML for manipulating symbolic names inspired by # calculi with extensible records. The resulting calculus supports the use of symbolic names for metaprogramming and programming inthelarge, it subsumes Ancona and Zucca's CMS, and partly Nanevski and Pfenning's # , and seems able to model some aspects of the mechanism of Java class loaders. We present two di#erent extensions of the basic calculus, the first consider the interaction with computational e#ects (in the form of imperative computations), the second shows how CMS can be naturally encoded into ML . 1
Staging Dynamic Programming Algorithms
, 2005
"... Applications of dynamic programming (DP) algorithms are numerous, and include genetic engineering and operations research problems. At a high level, DP algorithms are specified as a system of recursive equations implemented using memoization. The recursive nature of these equations suggests that the ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
Applications of dynamic programming (DP) algorithms are numerous, and include genetic engineering and operations research problems. At a high level, DP algorithms are specified as a system of recursive equations implemented using memoization. The recursive nature of these equations suggests that they can be written naturally in a functional language. However, the requirement for memoization poses a subtle challenge: memoization can be implemented using monads, but a systematic treatment introduces several layers of abstraction that can have a prohibitive runtime overhead. Inspired by other researchers' experience with automatic specialization (partial evaluation), this paper investigates the feasibility of explicitly staging DP algorithms in the functional setting. We find that the key challenge is code duplication (which is automatically handled by partial evaluators), and show that a key source of code duplication can be isolated and addressed once and for all. The result is a simple combinator library. We use this library to implement several standard DP algorithms including ones in standard algorithm textbooks (e.g.
TypeSpecialized Staged programming . . .
, 2009
"... Staging is a powerful language construct that allows a program at one stage to manipulate and specialize a program at the next. We propose 〈ML 〉 as a new staged calculus designed with novel features for staged programming in modern computing platforms such as embedded systems. A distinguishing featu ..."
Abstract
 Add to MetaCart
(Show Context)
Staging is a powerful language construct that allows a program at one stage to manipulate and specialize a program at the next. We propose 〈ML 〉 as a new staged calculus designed with novel features for staged programming in modern computing platforms such as embedded systems. A distinguishing feature of 〈ML 〉 is a model of process separation, whereby different stages of computation are executed in different process spaces. Our language also supports dynamic type specialization via type abstraction, dynamic type construction, and a limited form of type dependence. 〈ML 〉 is endowed with a largely standard metatheory, including type preservation and type safety results. We discuss the utility of our language via code examples from the domain of wireless sensor network programming.