Results 1  10
of
18
Alias Types for Recursive Data Structures
, 2000
"... Linear type systems permit programmers to deallocate or explicitly recycle memory, but they are severly restricted by the fact that they admit no aliasing. This paper describes a pseudolinear type system that allows a degree of aliasing and memory reuse as well as the ability to define complex recu ..."
Abstract

Cited by 137 (14 self)
 Add to MetaCart
Linear type systems permit programmers to deallocate or explicitly recycle memory, but they are severly restricted by the fact that they admit no aliasing. This paper describes a pseudolinear type system that allows a degree of aliasing and memory reuse as well as the ability to define complex recursive data structures. Our type system can encode conventional linear data structures such as linear lists and trees as well as more sophisticated data structures including cyclic and doublylinked lists and trees. In the latter cases, our type system is expressive enough to represent pointer aliasing and yet safely permit destructive operations such as object deallocation. We demonstrate the flexibility of our type system by encoding two common compiler optimizations: destinationpassing style and DeutschSchorrWaite or "linkreversal" traversal algorithms.
Normal Forms and Conservative Properties for Query Languages over Collection Types
 In Proceedings of 12th ACM Symposium on Principles of Database Systems
, 1993
"... Strong normalization results are obtained for a general language for collection types. An induced normal form for sets and bags is then used to show that the class of functions whose input has height (that is, the maximal depth of nestings of sets/bags/lists in the complex object) at most i and out ..."
Abstract

Cited by 54 (25 self)
 Add to MetaCart
Strong normalization results are obtained for a general language for collection types. An induced normal form for sets and bags is then used to show that the class of functions whose input has height (that is, the maximal depth of nestings of sets/bags/lists in the complex object) at most i and output has height at most o definable in a nested relational query language without powerset operator is independent of the height of intermediate expressions used. Our proof holds regardless of whether the language is used for querying sets, bags, or lists, even in the presence of variant types. Moreover, the normal forms are useful in a general approach to query optimization. Paredaens and Van Gucht proved a similar result for the special case when i = o = 1. Their result is complemented by Hull and Su who demonstrated the failure of independence when powerset operator is present and i = o = 1. The theorem of Hull and Su was generalized to all i and o by Grumbach and Vianu. Our result genera...
Normal Forms And Conservative Extension Properties For Query Languages Over Collection Types
 Journal of Computer and System Sciences
, 1995
"... Strong normalization results are obtained for a general language for collection types. An induced normal form for sets and bags is then used to show that the class of functions whose input has height (that is, the maximal depth of nestings of sets/bags/lists in the complex object) at most i and outp ..."
Abstract

Cited by 27 (8 self)
 Add to MetaCart
Strong normalization results are obtained for a general language for collection types. An induced normal form for sets and bags is then used to show that the class of functions whose input has height (that is, the maximal depth of nestings of sets/bags/lists in the complex object) at most i and output has height at most o definable in a nested relational query language without powerset operator is independent of the height of intermediate expressions used. Our proof holds regardless of whether the language is used for querying sets, bags, or lists, even in the presence of variant types. Moreover, the normal forms are useful in a general approach to query optimization. Paredaens and Van Gucht proved a similar result for the special case when i = o = 1. Their result is complemented by Hull and Su who demonstrated the failure of independence when powerset operator is present and i = o = 1. The theorem of Hull and Su was generalized to all i and o by Grumbach and Vianu. Our result generali...
A Transformation System for Lazy Functional Logic Programs
, 1999
"... Needed narrowing is a complete operational principle for modern declarative languages which integrate the best features of (lazy) functional and logic programming. We define a transformation methodology for functional logic programs based on needed narrowing. We provide (strong) correctness results ..."
Abstract

Cited by 19 (13 self)
 Add to MetaCart
Needed narrowing is a complete operational principle for modern declarative languages which integrate the best features of (lazy) functional and logic programming. We define a transformation methodology for functional logic programs based on needed narrowing. We provide (strong) correctness results for the transformation system w.r.t. the set of computed values and answer substitutions and show that the prominent properties of needed narrowing  namely, the optimality w.r.t. the length of derivations and the number of computed solutions  carry over to the transformation process and the transformed programs. We illustrate the power of the system by taking on in our setting two wellknown transformation strategies (composition and tupling). We also provide an implementation of the transformation system which, by means of some experimental results, highlights the benefits of our approach.
Constraints to Stop HigherOrder Deforestation
 In 24th ACM Symposium on Principles of Programming Languages
, 1997
"... Wadler's deforestation algorithm eliminates intermediate data structures from functional programs. To be suitable for inclusion in a compiler, it must terminate on all programs. Several techniques to ensure termination of deforestation on all firstorder programs are known, but a technique for highe ..."
Abstract

Cited by 12 (1 self)
 Add to MetaCart
Wadler's deforestation algorithm eliminates intermediate data structures from functional programs. To be suitable for inclusion in a compiler, it must terminate on all programs. Several techniques to ensure termination of deforestation on all firstorder programs are known, but a technique for higherorder programs was only recently introduced by Hamilton, and elaborated and implemented in the Glasgow Haskell compiler by Marlow. We introduce a new technique for ensuring termination of deforestation on all higherorder programs that allows useful transformation steps prohibited in Hamilton's and Marlowe's techniques. 1 Introduction Lazy, higherorder, functional programming languages lend themselves to a certain style of programming which uses intermediate data structures [28]. Example 1 Consider the following program. letrec a = x; y:case x of [] ! y (h : t) ! h : a t y in u; v; w: a (a u v) w The term u; v; w:a (a u v) w appends the three lists u, v, and w. Appending u and v ...
Lowering: A Static Optimization Technique for Transparent Functional Reactivity
 Partial Evaluation and Program Manipulation
, 2007
"... with Greg Cooper and Shriram Krishnamurthi advisingThis is a brief description of the work I did in 2006 for my master's degree. For a more detailed description, the reader is encouraged to read the published paper [1] instead. 1. Background Functional Reactive Programming (FRP) extends traditional ..."
Abstract

Cited by 9 (1 self)
 Add to MetaCart
with Greg Cooper and Shriram Krishnamurthi advisingThis is a brief description of the work I did in 2006 for my master's degree. For a more detailed description, the reader is encouraged to read the published paper [1] instead. 1. Background Functional Reactive Programming (FRP) extends traditional functional programming by adding support for timevarying values, referred to as behaviors. For example, an FRP programming language might expose behaviors representing the current time, the current position of the mouse, the current temperature outside, etc. Note that the word “current ” is common to all of these descriptions; the essential feature of behaviors is that their value is liable to change at any time. FRP programs can work with behaviors just as if they were regular, constant values (e.g. they can be passed to functions, stored in data structures, etc), and whenever the value of a behavior changes, the relevant portion of the program will be recomputed. In short, a behavior is rather like a cell in a spreadsheet; whenever its value changes, any cell that refers to it will automatically be updated. FrTime is a Scheme implementation of FRP, written by Greg Cooper. The main design goal for FrTime was that it should feel like Scheme as much as possible, so behaviors are implicitly supported throughout the entire
Adaptive Evaluation of NonStrict Programs
, 2004
"... Most popular programming languages are strict. In a strict language, the binding of a variable to an expression coincides with the evaluation of the expression. Nonstrict languages attempt to make life easier for programmers by decoupling expression binding and expression evaluation. In a nonstric ..."
Abstract

Cited by 6 (0 self)
 Add to MetaCart
Most popular programming languages are strict. In a strict language, the binding of a variable to an expression coincides with the evaluation of the expression. Nonstrict languages attempt to make life easier for programmers by decoupling expression binding and expression evaluation. In a nonstrict language, a variable can be bound to an unevaluated expression, and such expressions can be passed around just like values in a strict language. This separation allows the programmer to declare a variable at the point that makes most logical sense, rather than at the point at which its value is known to be needed. Nonstrict languages are usually evaluated using a technique called Lazy Evaluation. Lazy Evaluation will only evaluate an expression when its value is known to be needed. While Lazy Evaluation minimises the total number of expressions evaluated, it imposes a considerable bookkeeping overhead, and has unpredictable space behaviour. In this thesis, we present a new evaluation strategy which we call Optimistic Evaluation. Optimistic Evaluation blends lazy and eager evaluation under the guidance of an online profiler. The online profiler observes the running program and decides which expressions should
Rules + Strategies for Transforming Lazy Functional Logic Programs
 Theoretical Computer Science
, 2004
"... This work introduces a transformation methodology for functional logic programs based on needed narrowing, the optimal and complete operational principle for modern declarative languages which integrate the best features of functional and logic programming. We provide correctness results for the tra ..."
Abstract

Cited by 5 (4 self)
 Add to MetaCart
This work introduces a transformation methodology for functional logic programs based on needed narrowing, the optimal and complete operational principle for modern declarative languages which integrate the best features of functional and logic programming. We provide correctness results for the transformation system w.r.t. the set of computed values and answer substitutions and show that the prominent properties of needed narrowing—namely, the optimality w.r.t. the length of derivations and the number of computed solutions—carry over to the transformation process and the transformed programs. We illustrate the power of the system by taking on in our setting two wellknown transformation strategies (composition and tupling). We also provide an implementation of the transformation system which, by means of some experimental results, highlights the potentiality of our approach.
Intel pentium 4 and intel xeon processor optimization reference manual. Intel Corporation, order number
 in "Proceedings of Asian Symposium on Programming Languages and Systems (APLAS’04)", LNCS
, 2004
"... Abstract. Modular programming enjoys many wellknown advantages but the composition of modular units may also lead to inefficient programs. In this paper, we propose an invasive composition method which strives to reconcile modularity and efficiency. Our technique, network fusion, automatically merg ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
Abstract. Modular programming enjoys many wellknown advantages but the composition of modular units may also lead to inefficient programs. In this paper, we propose an invasive composition method which strives to reconcile modularity and efficiency. Our technique, network fusion, automatically merges networks of interacting components into equivalent sequential programs. We provide the user with an expressive language to specify scheduling constraints which can be taken into account during network fusion. Fusion allows to replace internal communications by assignments and alleviates most time overhead. We present our approach in a generic and unified framework based on labeled transition systems, static analysis and transformation techniques. 1
Warm Fusion for the Masses: Detailing Virtual Data Structure Elimination in Fully Recursive Languages
, 1997
"... In functional programming, small programs are often combined to construct larger, more complex ones. The component reuse encouraged by this modular style of programming yields many benefits, but, unfortunately, modular programs also tend to be less efficient than their monolithic counterparts. In ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
In functional programming, small programs are often combined to construct larger, more complex ones. The component reuse encouraged by this modular style of programming yields many benefits, but, unfortunately, modular programs also tend to be less efficient than their monolithic counterparts. Inefficiency is significantly attributable to the construction of intermediate data structures which "glue" together the smaller program components into larger ones. Fusion is the process of removing intermediate data structures from modularly constructed programs. Two particularly successful approaches to achieving fusion in functional languages have emerged in recent years. The first is a catamorphic fusion technique based on the promotion theorems of category theory. The second is a shortcut based on parametricity which fuses compositional programs via canned applications of traditional fold/unfold program transformation steps. Both techniques apply only to programs written in terms ...