Results 1  10
of
15
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 43 (14 self)
 Add to MetaCart
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 11 (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 7 (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.
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's # , ..."
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
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 1 (0 self)
 Add to MetaCart
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.
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 1 (0 self)
 Add to MetaCart
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 ..."
A Cumulative Monadic Metalanguage
, 2004
"... We introduce a monadic metalanguage which combines two previously proposed monadic metalanguages: one for staging and the other for value recursion. The metalanguage includes also extensible records as a basic name management facility. 1 ..."
Abstract
 Add to MetaCart
We introduce a monadic metalanguage which combines two previously proposed monadic metalanguages: one for staging and the other for value recursion. The metalanguage includes also extensible records as a basic name management facility. 1
Efficient Recursion in the Presence of Effects
"... In the interest of designing a recursive module extension to ML that is as simple and general as possible, we study the important subproblem of how to support recursive definitions of effectful expressions. Effects seem to necessitate a Schemestyle backpatching semantics of recursion, which typical ..."
Abstract
 Add to MetaCart
In the interest of designing a recursive module extension to ML that is as simple and general as possible, we study the important subproblem of how to support recursive definitions of effectful expressions. Effects seem to necessitate a Schemestyle backpatching semantics of recursion, which typically results in a performance penalty since all recursive references must check whether or not the recursive variable has been backpatched yet.
A Modal Language for Effects
, 2004
"... Building on a judgmental formulation of lax logic, we propose a modal language which can be used as a framework for practical programming languages with e#ects. Its characteristic feature is a syntactic distinction between terms and expressions, where terms denote values and expressions denote compu ..."
Abstract
 Add to MetaCart
Building on a judgmental formulation of lax logic, we propose a modal language which can be used as a framework for practical programming languages with e#ects. Its characteristic feature is a syntactic distinction between terms and expressions, where terms denote values and expressions denote computations. We distinguish between control e#ects and world e#ects, and allow control e#ects only in terms and world e#ects only in expressions. Therefore the distinction between values and computations is made only with respect to world e#ects. We give an explanation of the type system and the operational semantics from a modal logic perspective. We also introduce a term construct similar to Haskell's runST construct and augment the type system to ensure its safety.