Results 1 - 10
of
14
Benchmarking implementations of lazy functional languages II - Two years later
- In 6th Functional programming languages and computer architecture
, 1993
"... Six implementations of different lazy functional languages are compared using a common benchmark of a dozen medium-sized programs. The experiments that were carried out two years ago have been repeated to chart progress in the development of these compilers. The results have been extended to include ..."
Abstract
-
Cited by 33 (5 self)
- Add to MetaCart
Six implementations of different lazy functional languages are compared using a common benchmark of a dozen medium-sized programs. The experiments that were carried out two years ago have been repeated to chart progress in the development of these compilers. The results have been extended to include all three major Haskell compilers. Over the last two years, the Glasgow Haskell compiler has been improved considerably. The other compilers have also been improved, but to a lesser extent. The Yale Haskell compiler is slower than the Glasgow and Chalmers Haskell compilers. The compilation speed of the Clean compiler is still unrivalled. Another extension is a comparison of results on different architectures so as to look at architectural influences on the benchmarking procedure. A high-end architecture should be avoided for benchmarking activities, as its behaviour is uneven. It is better to use a midrange machine if possible. 1 Introduction In the previous benchmark paper [10], which wi...
FCG: a Code Generator for Lazy Functional Languages
- Compiler construction (CC 92), LNCS 641
, 1992
"... The FCG code generator produces portable code that supports efficient two-space copying garbage collection. The code generator transforms the output of the FAST compiler front end into an abstract machine code. This code explicitly uses a call stack, which is accessible to the garbage collector. In ..."
Abstract
-
Cited by 13 (3 self)
- Add to MetaCart
The FCG code generator produces portable code that supports efficient two-space copying garbage collection. The code generator transforms the output of the FAST compiler front end into an abstract machine code. This code explicitly uses a call stack, which is accessible to the garbage collector. In contrast to other functional language compilers that generate assembly directly, FCG uses the C compiler for code generation, providing high-quality code optimisations and portability. To make full use of the C compiler's capabilities, FCG includes an optimisation scheme that transforms the naively generated stack-based code into a register-based equivalent form. The results for a benchmark of functional programs show that code generated by FCG performs well in comparison with the LML compiler. 1 Introduction Functional languages offer the programmer referential transparency, and increased expressiveness in comparison with ordinary imperative languages: higher order functions, lazy evaluati...
Arrays in a lazy functional language -- a case study: the fast Fourier transform
- 2nd Arrays, functional languages, and parallel systems (ATABLE
, 1992
"... The array plays a prominent role in imperative programming languages because the data structure bears a close resemblance to the mathematical notion of a vector and because array operations can be implemented efficiently. Not all lazy functional languages offer arrays as a primitive data structure b ..."
Abstract
-
Cited by 8 (5 self)
- Add to MetaCart
The array plays a prominent role in imperative programming languages because the data structure bears a close resemblance to the mathematical notion of a vector and because array operations can be implemented efficiently. Not all lazy functional languages offer arrays as a primitive data structure because laziness makes it difficult to implement arrays efficiently. We study 8 different versions of the Fast Fourier Transform, with and without arrays, to assess the importance of arrays in a lazy functional language. An efficient implementation of arrays contributes significantly to the performance of functional languages in certain areas. However, a clear distinction should be made between array construction and array subscription. In the FFT example we could not gain efficiency by using array construction, other than for storing precomputed data like the input. Using array subscription improves performance. 1
On the Benefits of Different Analyses in the Compilation of a Lazy Functional Language
, 1991
"... Implementations of lazy functional languages have not as yet approached the speed of execution provided by imperative, or even non-lazy functional languages. It has been suggested that the answer to this problem lies with powerful analyses, based on abstract interpretation, such as strictness analys ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
Implementations of lazy functional languages have not as yet approached the speed of execution provided by imperative, or even non-lazy functional languages. It has been suggested that the answer to this problem lies with powerful analyses, based on abstract interpretation, such as strictness analyses that can deal with arbitrary data structures and higher-order functions. In this paper we present a break down of the benefits of a number of analyses, each performed at increasing levels of sophistication, and analysed for a set of medium-sized functional programs. We conclude that the benefits of important analyses are limited. 1 Introduction The FAST (Functional programming on ArrayS of Transputers) project team at Southampton have developed an optimising compiler for a lazy functional language to a single processor. In this paper we report on measurements that illustrate the run time effects of the compile time analysis performed. Strictness analysis and boxing analysis are the most ...
Statistics on Storage Management in a Lazy Functional Language Implementation
, 1992
"... The aim of the FAST project is to provide an implementation of a lazy functional language on a transputer array. An important component of this system is a highly optimising compiler and runtime system for a single transputer. Efficient storage management is crucial in such an implementation, and th ..."
Abstract
-
Cited by 5 (2 self)
- Add to MetaCart
The aim of the FAST project is to provide an implementation of a lazy functional language on a transputer array. An important component of this system is a highly optimising compiler and runtime system for a single transputer. Efficient storage management is crucial in such an implementation, and this paper explores the demands placed on the storage manager by our compiled code. Statistics are presented illustrating the lifetime characteristics of cells, a break down of claimed cells by type, and other information which is of interest to the designer of a storage management system. We conclude that most cells are short lived, and that cell turnover is quite high. In addition, application cells are found to die much younger than cells of other types. We also examine the effect of vector apply cells on suspension forming activities. Finally we explore the possibility of using contextual information when predicting the lifetime of application and vector application cells, and suggest ways...
A Parallel Functional Language Compiler for Message-Passing Multicomputers
, 1998
"... The research presented in this thesis is about the design and implementation of Naira, a parallel, parallelising compiler for a rich, purely functional programming language. The source language of the compiler is a subset of Haskell 1.2. The front end of Naira is written entirely in the Haskell subs ..."
Abstract
-
Cited by 4 (2 self)
- Add to MetaCart
The research presented in this thesis is about the design and implementation of Naira, a parallel, parallelising compiler for a rich, purely functional programming language. The source language of the compiler is a subset of Haskell 1.2. The front end of Naira is written entirely in the Haskell subset being compiled. Naira has been successfully parallelised and it is the largest successfully parallelised Haskell program having achieved good absolute speedups on a network of SUN workstations. Having the same basic structure as other production compilers of functional languages, Naira's parallelisation technology should carry forward to other functional language compilers. The back end of Naira is written in C and generates parallel code in the C language which is envisioned to be run on distributed-memory machines. The code generator is based on a novel compilation scheme specified using a restricted form of Milner's ß-calculus which achieves asynchronous communication. We present the f...
A Toolkit for Parallel Functional Programming
, 1995
"... this paper is on writing parallel programs, we will not say more about programming in Miranda. 5 Tools and annotations for parallelism ..."
Abstract
-
Cited by 4 (2 self)
- Add to MetaCart
this paper is on writing parallel programs, we will not say more about programming in Miranda. 5 Tools and annotations for parallelism
The resource constrained shortest path problem implemented in a lazy functional language
- Journal of Functional Programming
, 1994
"... The resource constrained shortest path problem is an NP-hard problem for which many ingenious algorithms have been developed. These algorithms are usually implemented in FORTRAN or another imperative programming language. We have implemented some of the simpler algorithms in a lazy functional langua ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
The resource constrained shortest path problem is an NP-hard problem for which many ingenious algorithms have been developed. These algorithms are usually implemented in FORTRAN or another imperative programming language. We have implemented some of the simpler algorithms in a lazy functional language. Benefits accrue in the software engineering of the implementations. Our implementations have been applied to a standard benchmark of data files, which is available from the Operational Research Library of Imperial College, London. The performance of the lazy functional implementations, even with the comparatively simple algorithms that we have used, is competitive with a reference FORTRAN implementation.
Experiments With Destructive Updates in a Lazy Functional Language
- Computer languages
, 1994
"... The aggregate update problem has received considerable attention since pure functional programming languages were recognised as an interesting research topic. There is extensive literature in this area, which proposes a wide variety of solutions. We have tried to apply some of the proposed solutions ..."
Abstract
-
Cited by 3 (2 self)
- Add to MetaCart
The aggregate update problem has received considerable attention since pure functional programming languages were recognised as an interesting research topic. There is extensive literature in this area, which proposes a wide variety of solutions. We have tried to apply some of the proposed solutions to our own applications to see how these solutions work in practice. We have been able to use destructive updates but are not convinced that this could have been achieved without application specific knowledge. In particular, no form of update analysis has been reported that is applicable to non-flat domains in polymorphic languages with higher order functions. It is our belief that a refinement of the monolithic approach towards constructing arrays may be a good alternative to using the incremental approach with destructive updates. Keywords: lazy functional languages, array updates, compilation, annotation, measurements. 1 Introduction In a pure functional language it is difficult to im...
FAST compiler user's guide
, 1993
"... The FAST compiler is a backend for compilers of lazy functional languages. There are two versions of the compiler: one that takes a rather simple lazy functional language as input and a second that accepts a language similar to Miranda. On output the compiler produces a set of macro calls that are n ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
The FAST compiler is a backend for compilers of lazy functional languages. There are two versions of the compiler: one that takes a rather simple lazy functional language as input and a second that accepts a language similar to Miranda. On output the compiler produces a set of macro calls that are normally turned into a C program by one of the code generators that have been developed for FAST. Such a C program must be compiled by a C compiler and linked with the appropriate runtime library to form an executable. This document decsribes how to use the FAST compiler. Familiarity with functional languages and their implementation methods is required to make full use of this document. 1 Introduction The FAST (Functional programming on ArrayS of Transputers) project team at Southampton has developed an optimising compiler for a lazy functional language on a single processor [6]. This document describes how to use the compiler. The compiler accepts on input a language called Intermediate th...

