Results 1 -
6 of
6
Extensible Denotational Language Specifications
- SYMPOSIUM ON THEORETICAL ASPECTS OF COMPUTER SOFTWARE, NUMBER 789 IN LNCS
, 1994
"... Traditional denotational semantics assigns radically different meanings to one and the same phrase depending on the rest of the programming language. If the language is purely functional, the denotation of a numeral is a function from environments to integers. But, in a functional language with impe ..."
Abstract
-
Cited by 30 (4 self)
- Add to MetaCart
Traditional denotational semantics assigns radically different meanings to one and the same phrase depending on the rest of the programming language. If the language is purely functional, the denotation of a numeral is a function from environments to integers. But, in a functional language with imperative control operators, a numeral denotes a function from environments and continuations to integers. This paper introduces a new format for denotational language specifications, extended direct semantics, that accommodates orthogonal extensions of a language without changing the denotations of existing phrases. An extended direct semantics always maps a numeral to the same denotation: the injection of the corresponding number into the domain of values. In general, the denotation of a phrase in a functional language is always a projection of the denotation of the same phrase in the semantics of an extended language---no matter what the extension is. Based on extended direct semantics, i...
Handling Control
- In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation
, 1993
"... Non-local control transfer and exception handling have a long tradition in higher-order programming languages such as Common Lisp, Scheme and ML. However, each language stops short of providing a full and complementary approach --- control handling is provided only if the corresponding control oper ..."
Abstract
-
Cited by 17 (0 self)
- Add to MetaCart
Non-local control transfer and exception handling have a long tradition in higher-order programming languages such as Common Lisp, Scheme and ML. However, each language stops short of providing a full and complementary approach --- control handling is provided only if the corresponding control operator is first-order. In this work, we describe handlers in a higher-order control setting. We invoke our earlier theoretical result that all denotational models of control languages invariably include capabilities that handle control. These capabilities, when incorporated into the language, form an elegant and powerful higher-order generalization of the first-order exception-handling mechanism. 1 Introduction Control manipulation in applicative programming languages comes in two flavors. First-order control operators allow computations to abort to a dynamically enclosing control context, e.g., Common Lisp's [23, 24] throw and ML's [9, 17] raise. They are invariably accompanied by forms th...
Delimiting the Scope of Effects
- In Proceedings of the Conference on Functional Programming Languages and Computer Architecture
, 1993
"... Program fragments in functional languages may be observationally congruent in a language without effects (continuations, state, exceptions) but not in an extension with effects. We give a generic way to preserve pure functional congruences by means of an effects delimiter. The effects delimiter is ..."
Abstract
-
Cited by 10 (1 self)
- Add to MetaCart
Program fragments in functional languages may be observationally congruent in a language without effects (continuations, state, exceptions) but not in an extension with effects. We give a generic way to preserve pure functional congruences by means of an effects delimiter. The effects delimiter is defined semantically using the retraction techniques of [14], but can also be given an operational semantics. We show that the effects delimiter restores observational congruences between purely functional pieces of code, thus achieving a modular separation between the purely functional language and its extensions. 1 Introduction Functional programming is a powerful paradigm, but it has long been recognized that purely functional programs are often inefficient and cumbersome. Many modern functional languages, e.g., SML [9], build in control and state features that strictly fall outside the functional paradigm. For example, SML of New Jersey includes a "call-with-current-continuation" opera...
Representing Control in Parallel Applicative Programming
, 1994
"... This research is an attempt to reason about the control of parallel computation in the world of applicative programming languages. Applicative languages, in which computation is performed through function application and in which functions are treated as first-class objects, have the benefits of ele ..."
Abstract
- Add to MetaCart
This research is an attempt to reason about the control of parallel computation in the world of applicative programming languages. Applicative languages, in which computation is performed through function application and in which functions are treated as first-class objects, have the benefits of elegance, expressiveness and having clean semantics. Parallel computation and real-world concurrent activities are much harder to reason about than the sequential counterparts. Many parallel applicative languages have thus hidden most control details with their declarative programming styles, but they are not expressive enough to characterize many real world concurrent activities that can be easily explained with concepts such as message passing, pipelining and so on. Ease of programming should not come at the expense of expressiveness. Therefore, we design a parallel applicative language Pscheme such that programmers can express explicitly the control of parallel computation while maintaining ...
The Logic and Expressibility of Simply-typed Call-by-value and Lazy Languages
, 1991
"... We study the operational, denotational, and axiomatic semantics of lazy and call-by-value functional languages, and use these semantics to build a new expressiveness theory for comparing functional languages. The first part of the thesis develops the theory of lazy and call-by-value languages separa ..."
Abstract
- Add to MetaCart
We study the operational, denotational, and axiomatic semantics of lazy and call-by-value functional languages, and use these semantics to build a new expressiveness theory for comparing functional languages. The first part of the thesis develops the theory of lazy and call-by-value languages separately, following paradigmatic studies of call-by-name functional languages. We first describe the operational semantics of two simply-typed languages, lazy PCF and call-byvalue PCF. These two languages provide enough intuition to describe general definitions of denotational models and logics for lazy and call-by-value languages. We prove, via a completeness theorem, that the definitions of models and logic coincide for both the lazy and call-by-value theories. The second part of the thesis compares the two kinds of languages via translations. Specifically, we develop the idea of a fully abstract translation and define new fully abstract translations from call-by-value PCF to lazy PCF, and vi...
Universal Domains For Sequential Computation
, 1995
"... Classical recursion theory asserts that all conventional programming languages are equally expressive because they can define all partial recursive functions over the natural numbers. However, most real programming languages support some form of higher-order data such as potentially infinite streams ..."
Abstract
- Add to MetaCart
Classical recursion theory asserts that all conventional programming languages are equally expressive because they can define all partial recursive functions over the natural numbers. However, most real programming languages support some form of higher-order data such as potentially infinite streams, lazy trees, and functions. Since these objects do not have finite canonical representations, computations over these objects cannot be accurately modeled as ordinary computations over the natural numbers. In my thesis, I develop a theory of higher order computability based on a new formulation of domain theory. This new formulation interprets elements of any data domain as lazy trees. Like classical domain theory, it provides a universal domain T and a universal language KL. A rich class of domains called observably sequential domains can be specified in T with functions definable in KL. Such an embedding of a data domain enables the operations on the domain to be defined in the universa...

