Results 1  10
of
21
Understanding and Evolving the ML Module System
, 2005
"... 0121633. Any opinions, findings, and conclusions or recommendations in this publication are those of the author and do not reflect the views of these agencies. Keywords: ML, module systems, type systems, functors, abstract data types, lambda calculus, The ML module system stands as a highwater mark ..."
Abstract

Cited by 44 (18 self)
 Add to MetaCart
(Show Context)
0121633. Any opinions, findings, and conclusions or recommendations in this publication are those of the author and do not reflect the views of these agencies. Keywords: ML, module systems, type systems, functors, abstract data types, lambda calculus, The ML module system stands as a highwater mark of programming language support for data abstraction. Nevertheless, it is not in a fully evolved state. One prominent weakness is that module interdependencies in ML are restricted to be acyclic, which means that mutually recursive functions and data types must be written in the same module even if they belong conceptually in different modules. Existing efforts to remedy this limitation either involve drastic changes to the notion of what a module is, or fail to allow mutually recursive modules to hide type information from one another. Another issue is that there are several dialects of ML (the most popular being SML and O’Caml), and the module systems of these dialects differ in subtle yet semantically significant ways that have been difficult to account for in any rigorous way. It is important to come to a clear assessment of the existing design space and consolidate what is meant by “the ML module system” before embarking on such a major extension as recursive modules. In this dissertation I contribute to the understanding and evolution of the ML module system
A.: Lazy evaluation and delimited control
 In: POPL ’09: Proceedings of the 36th Annual ACM SIGPLANSIGACT Symposium on Principles of Programming Languages
, 2009
"... The callbyneed lambda calculus provides an equational framework for reasoning syntactically about lazy evaluation. This paper examines its operational characteristics. By a series of reasoning steps, we systematically unpack the standardorder reduction relation of the calculus and discover a nove ..."
Abstract

Cited by 15 (0 self)
 Add to MetaCart
The callbyneed lambda calculus provides an equational framework for reasoning syntactically about lazy evaluation. This paper examines its operational characteristics. By a series of reasoning steps, we systematically unpack the standardorder reduction relation of the calculus and discover a novel abstract machine definition which, like the calculus, goes “under lambdas. ” We prove that machine evaluation is equivalent to standardorder evaluation. Unlike traditional abstract machines, delimited control plays a significant role in the machine’s behavior. In particular, the machine replaces the manipulation of a heap using storebased effects with disciplined management of the evaluation stack using controlbased effects. In short, state is replaced with control. To further articulate this observation, we present a simulation of callbyneed in a callbyvalue language using delimited control operations.
Traced Premonoidal Categories
, 1999
"... Motivated by some examples from functional programming, we propose a generalization of the notion of trace to symmetric premonoidal categories and of Conway operators to Freyd categories. We show that in a Freyd category, these notions are equivalent, generalizing a wellknown theorem relating trace ..."
Abstract

Cited by 12 (0 self)
 Add to MetaCart
Motivated by some examples from functional programming, we propose a generalization of the notion of trace to symmetric premonoidal categories and of Conway operators to Freyd categories. We show that in a Freyd category, these notions are equivalent, generalizing a wellknown theorem relating traces and Conway operators in cartesian categories.
Baseball Abstract
, 1983
"... Many mainstream languages have operators named yield that share common semantic roots but differ significantly in their details. We present the first known formal study of these mainstream yield operators, unify their many semantic differences, adapt them to to a functional setting, and distill the ..."
Abstract

Cited by 7 (0 self)
 Add to MetaCart
Many mainstream languages have operators named yield that share common semantic roots but differ significantly in their details. We present the first known formal study of these mainstream yield operators, unify their many semantic differences, adapt them to to a functional setting, and distill the operational semantics and type theory for a generalized yield operator. The resultant yield, with its delimiter run, turns out to be a delimited control operator of comparable expressive power to shiftreset, with translations from one to the other. The mainstream variants of yield turn out to be oneshot or linearly used restrictions of delimited continuations. These connections may serve as a means of transporting ideas from the rich theory on delimited continuations to mainstream languages which have largely shied away from them. Dually, the restrictions of the various existing yield operations may be treated as shiftreset variants that have found mainstream acceptance and thus worthy of study. 1
An Alternative Approach to Initializing Mutually Referential Objects
, 2005
"... Mutual dependencies between objects arise frequently in programs, and programmers must typically resort to manually filling “initialization holes ” to help construct the corresponding object graphs, i.e. null values and/or explicitly mutable locations. This report describes a “baseline ” proposal f ..."
Abstract

Cited by 2 (1 self)
 Add to MetaCart
(Show Context)
Mutual dependencies between objects arise frequently in programs, and programmers must typically resort to manually filling “initialization holes ” to help construct the corresponding object graphs, i.e. null values and/or explicitly mutable locations. This report describes a “baseline ” proposal for a generalized form of value recursion in an MLlike language called initialization graphs, where value recursion is given the simplistic semantics of a graph of lazy computations whose nodes are sequentially forced, with uses of recursive values checked for initializationsoundness at runtime. We then develop examples using this mechanism to show how problematic the issue of value recursion is for MLlike languages, and in particular how sophisticated reactive objects cannot be defined in the language without using initialization holes, and how this forces ML programmers to break abstraction boundaries. At the same time we show how OO languages rely extensively on null pointers during initialization. We propose that a general, semisafe mechanism allows value recursion to be used in conjunction with existing sophisicated abstract APIs such GUI libraries, and allows freshly defined APIs to be both abstract and yet not require clients to use explicit initialization holes. We propose that the initialization mechanism permits more programs to be expressed in the mutationfree fragment of ML, though we do not formally prove this result. 1
Denotational semantics for lazy initialization of letrec black
"... holes as exceptions rather than divergence ..."
(Show Context)
A Programming Language for Probabilistic Computation
, 2005
"... As probabilistic computations play an increasing role in solving various problems, researchers have designed probabilistic languages to facilitate their modeling. Most of the existing probabilistic languages, however, focus only on discrete distributions, and there has been little effort to develop ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
(Show Context)
As probabilistic computations play an increasing role in solving various problems, researchers have designed probabilistic languages to facilitate their modeling. Most of the existing probabilistic languages, however, focus only on discrete distributions, and there has been little effort to develop probabilistic languages whose expressive power is beyond discrete distributions. This dissertation presents a probabilistic language, called PTP (ProbabilisTic Programming), which supports all kinds of probability distributions.
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
Lazy modules
 UNDER CONSIDERATION FOR PUBLICATION IN J. FUNCTIONAL PROGRAMMING
, 2009
"... We investigate evaluation strategies for MLstyle modules supporting recursion. More precisely we propose and examine five evaluation strategies: a callbyvalue strategy and four callbyneed strategies with different degrees of laziness. We formalize the strategies by translating a source syntax f ..."
Abstract
 Add to MetaCart
We investigate evaluation strategies for MLstyle modules supporting recursion. More precisely we propose and examine five evaluation strategies: a callbyvalue strategy and four callbyneed strategies with different degrees of laziness. We formalize the strategies by translating a source syntax for modules into target languages, which are very much inspired by Felleisen and Hieb’s callbyvalue lambda calculus with state and Ariola and Felleisen’s callbyneed cyclic lambda calculus. Different strategies are expressed by tweaking the translation as well as the operational semantics of the target languages. We look at the strategies through a series of examples and state inclusion between the strategies.