Results 1 -
4 of
4
Concurrent Clean
, 1991
"... Concurrent Clean is an experimental, lazy, higher-order parallel functional programming language based on term graph rewriting. An important difference with other languages is that in Clean graphs are manipulated and not terms. This can be used by the programmer to control communication and sharing ..."
Abstract
-
Cited by 59 (4 self)
- Add to MetaCart
Concurrent Clean is an experimental, lazy, higher-order parallel functional programming language based on term graph rewriting. An important difference with other languages is that in Clean graphs are manipulated and not terms. This can be used by the programmer to control communication and sharing of computation. Cyclic structures can be defined. Concurrent Clean furthermore allows to control the (parallel) order of evaluation to make efficient evaluation possible. With help of sequential annotations the default lazy evaluation can be locally changed into eager evaluation. The language enables the definition of partially strict data structures which make a whole new class of algorithms feasible in a functional language. A powerful and fast strictness analyser is incorporated in the system. The quality of the code generated by the Clean compiler has been greatly improved such that it is one of the best code generators for a lazy functional language. Two very powerful parall...
Guaranteeing Safe Destructive Updates through a Type System with Uniqueness Information for Graphs
, 1994
"... In this paper we present a type system for graph rewrite systems: uniqueness typing . It employs usage information to deduce whether an object is `unique' at a certain moment, i.e. is only locally accessible. In a type of a function it can be specified that the function requires a unique argument ob ..."
Abstract
-
Cited by 29 (1 self)
- Add to MetaCart
In this paper we present a type system for graph rewrite systems: uniqueness typing . It employs usage information to deduce whether an object is `unique' at a certain moment, i.e. is only locally accessible. In a type of a function it can be specified that the function requires a unique argument object. The correctness of type assignment guarantees that no external access on the original object will take place in the future. The presented type system is proven to be correct. We illustrate the power of the system by defining an elegant quicksort algorithm that performs the sorting in situ on the data structure. 1. Introduction Some operations on complex data structures (such as arrays) cannot be implemented efficiently without allowing a form of destructive updating. For convenience, we speak about those functions as `destructively using' their arguments. In case of graph-like implementations of functional languages without any precautions, this destructive usage is dangerous: on the ...
Generating Efficient Code for Lazy Functional Languages
, 1991
"... In this paper we will discuss how a good code generator can be built for (lazy) functional languages. Starting from Concurrent Clean, an experimental lazy functional programming language, code is generated for an intermediate abstract machine: the ABC machine. In this first pass many well-known opti ..."
Abstract
-
Cited by 23 (5 self)
- Add to MetaCart
In this paper we will discuss how a good code generator can be built for (lazy) functional languages. Starting from Concurrent Clean, an experimental lazy functional programming language, code is generated for an intermediate abstract machine: the ABC machine. In this first pass many well-known optimisation techniques are included. However, we will also present some new ideas in this area, like the way in which strictness can be incorporated, and the implementation of higher order functions. In a second pass, the ABC code is translated to concrete target code for the Motorola MC680x0 processor. Again many optimisation methods appear to be applicable. Some of them (for example register allocation algorithms) are common for the implementation of other types of languages, but have to be adapted because of the specific properties of both source language and target machine. Other optimisations are specific for lazy functional languages, e.g. the implementation of higher order functions, eff...
Term Graph Rewriting and Strong Sequentiality
, 1992
"... Abstract This paper propagates the use of term graph rewriting systems as a formal computational model. The definition of both term graphs and the reduction relation on term graphs are more complex than their corresponding notions in term rewriting systems. Consequently, it is often believed that r ..."
Abstract
- Add to MetaCart
Abstract This paper propagates the use of term graph rewriting systems as a formal computational model. The definition of both term graphs and the reduction relation on term graphs are more complex than their corresponding notions in term rewriting systems. Consequently, it is often believed that reasoning about term graph rewriting systems is inherently more difficult than reasoning about term rewriting systems. In this paper we will show that it is very well possible to investigate formal properties of term graph rewriting systems entirely within the framework of these systems. First, we will establish a basic theory based on graph homomorphisms and the term graph reduction relation. In this theory the concepts of index and strong sequentiality are incorporated. Lastly, we will prove that index reduction is normalising for the so-called strongly sequential term graph rewriting systems . 1. Introduction Nowadays, it is a commonly accepted that graph rewriting is the most suitable t...

