[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / docs / abstracts / abstracts93.tex
1 \documentstyle[11pt,slpj,abstracts]{article}
2
3 \begin{document}
4
5 % ======================================================
6
7 \title{Abstracts of GRIP/GRASP/AQUA-related papers and reports, 1993
8 }
9
10 \author{The AQUA team \\ Department of Computing Science \\
11 University of Glasgow G12 8QQ
12 }
13
14 \maketitle
15
16 \begin{abstract}
17 We present a list of papers and reports related to the GRIP, GRASP and AQUA projects,
18 covering {\em the design, compilation technology,
19 and parallel implementations of functional programming languages, especially
20 \Haskell{}}.
21
22 Most of them can be obtained by FTP.  Connect to {\tt ftp.dcs.glasgow.ac.uk},
23 and look in {\tt pub/glasgow-fp/papers}, {\tt pub/glasgow-fp/drafts}, {\tt pub/glasgow-fp/tech\_reports},
24 or {\tt pub/glasgow-fp/grasp-and-aqua-docs}.
25
26 They can also be obtained by writing to 
27 Alexa Stewart, Department of Computing Science,
28 University of Glasgow G12 8QQ, UK.   Her electronic mail address is
29 alexa@dcs.glasgow.ac.uk.
30 \end{abstract}
31
32 \section{Published papers}
33
34 \reference{CV Hall}
35 {Using overloading to express distinctions}
36 {Information Processing Letters (to appear)}
37 {
38 Evaluators, also called ``interpreters'', play a variety of roles
39 in the study of programming languages.  Given this, it's surprising
40 that we don't have a better framework for developing evaluators and
41 specifying their relationship to each other. This paper
42 shows that type classes in Haskell provide an excellent 
43 framework for exploring relationships between evaluators, using
44 abstract interpretation as a motivating example.
45 }
46
47 \reference{A Gill, J Launchbury and SL Peyton Jones}
48 {A short cut to deforestation}
49 {ACM Conference on Functional Programming and Computer Architecture, Copenhagen, pp223-232}
50 {Lists are often used as ``glue'' to connect
51 separate parts of a program together.
52 We propose an automatic technique for 
53 improving the efficiency of such programs,
54 by removing many of these intermediate lists,
55 based on a single, simple, local transformation.
56 We have implemented the method in the Glasgow Haskell compiler.
57 }
58
59 \reference{P Sansom and SL Peyton Jones}
60 {Generational garbage collection for Haskell}
61 {ACM Conference on Functional Programming and Computer Architecture, Copenhagen, pp106-116}
62 {This paper examines the use of generational garbage collection
63 techniques for a lazy implementation of a non-strict functional
64 language. Detailed measurements which demonstrate that a generational
65 garbage collector can substantially out-perform non-generational
66 collectors, despite the frequency of write operations in the
67 underlying implementation, are presented.
68
69 Our measurements are taken from a state-of-the-art compiled
70 implementation for Haskell, running substantial benchmark programs.
71 We make measurements of dynamic properties (such as object lifetimes)
72 which affect generational collectors, study their interaction with a
73 simple generational scheme, make direct performance comparisons with
74 simpler collectors, and quantify the interaction with a paging system.
75
76 The generational collector is demonstrably superior.  At least for our
77 benchmarks, it reduces the net storage management overhead, and it
78 allows larger programs to be run on a given machine before thrashing
79 ensues.}
80
81 \reference{J Launchbury}
82 {Lazy imperative programming}
83 {Proc ACM Sigplan Workshop on State in Programming Languages, Copenhagen, June 1993 (available as
84 YALEU/DCS/RR-968, Yale University), pp46-56}
85 {
86 In this paper we argue for the importance of lazy state, that is,
87 sequences of imperative (destructive) actions in which the actions are
88 delayed until their results are required. This enables state-based
89 computations to take advantage of the control power of lazy evaluation.
90 We provide some examples of its use, and describe an implementation
91 within Glasgow Haskell.
92 }
93
94 \reference{G Akerholt, K Hammond, P Trinder and SL Peyton Jones}
95 {Processing transactions on GRIP, a parallel graph reducer}
96 {Proc Parallel Architectures and Languages Europe (PARLE), Munich, June 1993, pp634-647}
97 {
98 The GRIP architecture allows efficient execution of functional
99 programs on a multi-processor built from standard hardware components.
100 State-of-the-art compilation techniques are combined with
101 sophisticated runtime resource-control to give good parallel
102 performance.  This paper reports the results of running GRIP on an
103 application which is apparently unsuited to the basic functional
104 model: a database transaction manager incorporating updates as well as
105 lookup transactions.  The results obtained show good relative speedups
106 for GRIP, with real performance advantages over the same application
107 executing on sequential machines.
108 }
109
110 \reference{SL Peyton Jones and  PL Wadler}
111 {Imperative functional programming}
112 {ACM conference on Principles of Programming Languages, Charleston, Jan 1993}
113 {We present a new model, based on monads, for performing input/output
114 in a non-strict, purely functional language.  It
115 is composable, extensible, efficient, requires no extensions
116 to the type system, and extends smoothly to incorporate mixed-language
117 working and in-place array updates.
118 }
119
120 \reference{J Launchbury}
121 {An operational semantics for lazy evaluation}
122 {ACM conference on Principles of Programming Languages, Charleston, Jan 1993}
123 {We define an operational semantics for lazy evaluation which provides
124 an accurate model for sharing. The only computational structure
125 we introduce is a set of bindings which corresponds closely to a
126 heap. The semantics is set at a considerably higher level of abstraction
127 than operational semantics for particular abstract machines, so is
128 more suitable for a variety of proofs. Furthermore, because a heap
129 is explicitly modelled, the semantics provides a suitable framework
130 for studies about space behaviour of terms under lazy evaluation.
131 }
132
133 \reference{SL Peyton Jones, CV Hall, K Hammond, WD Partain, and PL Wadler}
134 {The Glasgow Haskell compiler: a technical overview}
135 {JFIT Technical Conference, Keele, March 1993}
136 {We give an overview of the Glasgow Haskell compiler,
137 focusing especially on way in which we have been able
138 to exploit the rich theory of functional languages to give
139 very practical improvements in the compiler.
140
141 The compiler is portable, modular, generates good code, and is 
142 freely available.
143 }
144
145 \reference{PL Wadler}
146 {A syntax for linear logic}
147 {Mathematical Foundations of 
148 Programming Language Semantics, New Orleans, April 1993}
149 {There is a standard syntax for Girard's linear logic, due
150 to Abramsky, and a standard semantics, due to Seely.  Alas, the
151 former is incoherent with the latter: different derivations of
152 the same syntax may be assigned different semantics.  This paper
153 reviews the standard syntax and semantics, and discusses the problem
154 that arises and a standard approach to its solution.  A new solution
155 is proposed, based on ideas taken from Girard's Logic of Unity.
156 The new syntax is based on pattern matching, allowing for concise
157 expression of programs.}
158
159 \reference{SL Peyton Jones, J Hughes, J Launchbury}
160 {How to give a good research talk}
161 {SIGPLAN Notices 28(11), Nov 1993, 9-12}
162 {
163 Giving a good research talk is not easy. We try to identify some things
164 which we have found helpful, in the hope that they may be useful to you. 
165 }
166
167
168 \section{Workshop papers and technical reports}
169
170 The 1993 Glasgow Functional Programming Workshop papers exist in
171 the draft proceedings at the moment.  They are being refereed, and will
172 be published by Springer Verlag in due course.
173
174 \reference{DJ King and J Launchbury}
175 {Lazy Depth-First Search and Linear Graph Algorithms in Haskell}
176 {\GlasgowNinetyThree{}}
177 {
178 Depth-first search is the key to a wide variety of graph algorithms.
179 In this paper we explore the implementation of depth first search in a
180 lazy functional language. For the first time in such languages we
181 obtain a linear-time implementation.  But we go further.  Unlike
182 traditional imperative presentations, algorithms are constructed from
183 individual components, which may be reused to create new
184 algorithms. Furthermore, the style of program is quite amenable to
185 formal proof, which we exemplify through a calculational-style proof
186 of a strongly-connected components algorithm.
187
188 {\em This paper has been submitted to Lisp \& Functional Programming 1994.}
189 }
190
191 \reference{K Hammond, GL Burn and DB Howe}
192 {Spiking your caches}
193 {\GlasgowNinetyThree{}}
194 {
195 Despite recent advances, predicting the performance of functional
196 programs on real machines remains something of a black art.  This
197 paper reports on one particularly unexpected set of results where
198 small variations in the size of a dynamic heap occasionally gave rise
199 to 50\% differences in CPU performance.  These performance {\em
200 spikes} can be traced to the cache architecture of the machine being
201 benchmarked, the widely-used Sun Sparcstation~1.  A major contribution
202 of our work is the provision of a tool which allows cache conflicts
203 to be located by the type of access (heap, stack etc.).  This can
204 be used to improve the functional language implementation, or to
205 study the memory access patterns of a particular program.
206 }
207
208 \reference{S Marlow}
209 {Update avoidance analysis}
210 {\GlasgowNinetyThree{}}
211 {
212 A requirement  of lazy    evaluation  is that     the value  of    any
213 subexpression in the program is calculated no more than once.  This is
214 achieved by updating an expression with its value, once computed.  The
215 problem is that  updating is a  costly operation,  and experimentation
216 has shown that it is only necessary  in about 30\%  of cases (that is,
217 70\% of expressions represent values that  are only ever required once
218 during execution).  The aim of the analysis presented in this paper is
219 to discover  expressions  that do not  need  to be  updated,  and thus
220 reduce  the  execution time  of  the program.   The  analysis has been
221 implemented in the Glasgow Haskell Compiler, and results are given.
222
223 FTP: @pub/glasgow-fp/authors/Simon_Marlow/update-avoidance.ps.gz@
224 }
225
226 \reference{SL Peyton Jones and WD Partain}
227 {Measuring the effectiveness of a simple strictness analyser}
228 {\GlasgowNinetyThree{}}
229 {
230 A lot has been written about strictness analysis for non-strict
231 functional programs, usually in the hope that the results of the
232 analysis can be used to reduce runtime.  On the other hand, few papers
233 present measurements of how well it works in practice.  Usually, all
234 that is presented are the run-times of a variety of (usually small)
235 programs, with and without strictness analysis enabled.  The goal of
236 this paper is to provide detailed quantitative insight about the
237 effectiveness of a simple strictness analyser, in the context of a
238 state-of-the art compiler running serious application programs.
239 }
240
241 \reference{J Mattson}
242 {Local speculative evaluation for distributed graph reduction}
243 {\GlasgowNinetyThree{}}
244 {
245 Speculative evaluation attempts to increase parallelism by
246 performing potentially useful computations before they are known to be
247 necessary.  Speculative computations may be coded explicitly in a
248 program, or they may be scheduled implicitly by the reduction system
249 as idle processors become available.  A general approach to both kinds
250 of speculation incurs a great deal of overhead which may outweigh the
251 benefits of speculative evaluation for fine-grain speculative tasks.  
252
253 Suppose that implicit speculative computations are restricted to
254 execution on the local processor, with the hope of performing
255 potentially useful work while the local mandatory tasks are all
256 blocked.  This restriction greatly simplifies the problems of
257 speculative task management, and it opens the door for fine-grain
258 speculative tasks.  More complex mechanisms for distributing
259 and managing coarse-grain speculative tasks can later be added on top of
260 the basic foundation provided for local speculative evaluation.
261 }
262
263 \reference{PM Sansom}
264 {Time profiling a lazy functional compiler}
265 {\GlasgowNinetyThree{}}
266 {
267 Recent years has seen the development of profiling tools for lazy
268 functional language implementations. This paper presents the results
269 of using a time profiler to profile the Glasgow Haskell compiler.
270 }
271
272 \reference{D King and J Launchbury}
273 {Functional graph algorithms with depth-first search}
274 {\GlasgowNinetyThree{}}
275 {Performing a depth-first search of a graph is one of the fundamental
276 approaches for solving a variety of graph algorithms.  Implementing
277 depth-first search efficiently in a pure functional language has only
278 become possible with the advent of imperative functional programming.
279 In this paper we mix the techniques of pure functional programming in
280 the same cauldron as depth-first search, to yield a more lucid
281 approach to viewing a variety of graph algorithms. This claim will be
282 illustrated with several examples.}
283
284 \reference{A Santos and SL Peyton Jones}
285 {Tuning a compiler's allocation policy}
286 {\GlasgowNinetyThree{}}
287 {There are many different costs involved in the allocation of
288 closures during the execution of functional programs.  Even more so
289 for closures that are not in normal form, as they have to be
290 allocated and then possibley entered and updated.  We compare several
291 different policies for closure allocation, trying to minimise these
292 costs.  The issues of laziness and full laziness are discussed.
293 }
294
295 \reference{CV Hall}
296 {A framework for optimising abstract data types}
297 {\GlasgowNinetyThree{}}
298 {Two trends have been developing in functional programming language
299 research. First, compilers are supporting optimisations of data
300 types, such as unboxed types and parallel bags.  Second, functional
301 programmers are increasingly writing code in a style that treats
302 data types as if they were abstract. Abstract data types offer
303 opportunities for optimisation because the representation of the
304 type can be optimised without affecting the program, allowing the
305 programmer to use operations on it and improve performance. At the
306 same time, the original type is often required by some part of the
307 program, and the programmer is left to figure out which to use
308 where.
309
310 This paper presents a general framework in which good functional
311 style automatically supports the efficient implementation of data
312 types.  It has been implemented in the Glasgow Haskell compiler
313 specifically to introduce an optimised list representation, and
314 this has been shown to cut execution time in half on a Sun
315 SPARCstation-1 for a substantial program.  Recent tests show that
316 it improves performance by more than a factor of 4 on the GRIP
317 parallel processor for short tests, however more experiments will
318 be necessary before we can assert that this speedup holds in
319 general.
320 }
321 \end{document}
322
323
324
325
326