Fergus Henderson
University of Melbourne
Network
Latest external collaboration on country level. Dive into details by clicking on the dots.
Publication
Featured researches published by Fergus Henderson.
Journal of Logic Programming | 1996
Zoltan Somogyi; Fergus Henderson; Thomas C. Conway
We introduce Mercury, a new purely declarative logic programming language designed to provide the support that groups of application programmers need when building large programs. Mercurys strong type, mode, and determinism systems improve program reliability by catching many errors at compile time. We present a new and relatively simple execution model that takes advantage of the information these systems provide, yielding very efficient code. The Mercury compiler uses this execution model to generate portable C code. Our benchmarking shows that the code generated by our implementation is significantly faster than the code generated by mature optimizing implementations of other logic programming languages.
programming language design and implementation | 1999
Simon L. Peyton Jones; Alastair Reid; Fergus Henderson; Tony Hoare; Simon Marlow
Some modern superscalar microprocessors provide only imprecise exceptions. That is, they do not guarantee to report the same exception that would be encountered by a straightforward sequential execution of the program. In exchange, they offer increased performance or decreased chip area (which amount to much the same thing).This performance/precision tradeoff has not so far been much explored at the programming language level. In this paper we propose a design for imprecise exceptions in the lazy functional programming language Haskell. We discuss several designs, and conclude that imprecision is essential if the language is still to enjoy its current rich algebra of transformations. We sketch a precise semantics for the language extended with exceptions.The paper shows how to extend Haskell with exceptions without crippling the language or its compilers. We do not yet have enough experience of using the new mechanism to know whether it strikes an appropriate balance between expressiveness and performance.
Electronic Notes in Theoretical Computer Science | 2001
Tyson Dowd; Fergus Henderson; Peter Ross
Abstract The .NET Common Language Runtime (CLR) offers a new opportunity to experiment with multi-language interoperation, and provides a relatively rare chance to explore deep interoperation of a wide range of programming language paradigms. This article describes how the logic/functional programming language Mercury is compiled to the CLR. We describe the problems we have encountered with generating code for the CLR, give some preliminary benchmark results, and suggest some possible improvements to the CLR regarding separate compilation, verifiability, tail calls, and efficiency.
Proceedings 23rd Australasian Computer Science Conference. ACSC 2000 (Cat. No.PR00518) | 2000
David Jeffery; Fergus Henderson; Zoltan Somogyi
The type systems of functional languages such as Haskell have recently become more powerful and expressive. They not only allow programmers to write code that works on values of any type (genericity), they also allow programmers to require that a particular type belongs to a given type class (constrained genericity). Such code may use any of the methods of the type class, since every type that is a member of the type class must implement those methods. This capability makes it significantly easier to express solutions to many common problems, and promotes code reuse. Incorporating type classes in a logic programming language provides some new challenges. In this paper, we explain how we have extended Mercurys type system to include support for type classes. We show that type classes integrate very nicely with Mercurys mode, determinism and uniqueness systems, and describe how our implementation works.
compiler construction | 2002
Fergus Henderson; Zoltan Somogyi
Many logic programming implementations compile to C, but they compile to very low-level C, and thus discard many of the advantages of compiling to a high-level language. We describe an alternative approach to compiling logic programs to C, based on continuation passing, that we have used in a new back-end for the Mercury compiler. The new approach compiles to much higher-level C code, which means the compiler back-end and run-time system can be considerably simpler. We present a formal schema for the transformation, and give benchmark results which show that this approach delivers performance that is more than competitive with the fastest previous implementation, with greater simplicity and better portability and interoperability.The approach we describe can also be used for compiling to other target languages, such as IL (the Microsoft .NET intermediate language).
principles and practice of declarative programming | 1999
Tyson Dowd; Zoltan Somogyi; Fergus Henderson; Thomas C. Conway; David Jeffery
The logic/functional language Mercury uses a strong, mostly static type system based on polymorphic many-sorted logic. For efficiency, the Mercury compiler uses type specific representations of terms, and implements polymorphic operations such as unifications via generic code invoked with descriptions of the actual types of the operands. These descriptions, which consist of automatically generated data and code, are the main components of the Mercury runtime type information (RTTI) system. We have used this system to implement several extensions of the Mercury system, including an escape mechanism from static type checking, generic input and output facilities, a debugger, and automatic memoization, and we are in the process of using it for an accurate, native garbage collector. We give detailed information on the implementation and uses of the Mercury RTTI system as well as measurements of the space costs of the system.
database systems for advanced applications | 1997
David B. Kemp; Thomas C. Conway; Evan P. Harris; Fergus Henderson; Kotagiri Ramamohanarao; Zoltan Somogyi
We demonstrate how a purely declarative language, with the help of strict typing, precise moding, and determinism declarations, can be used to concisely and declaratively express database transactions, including updates. We have begun incorporating transactions into the Aditi deductive database system using an extended form of Mercury as the database programming and query language.
Archive | 1995
Fergus Henderson; Thomas C. Conway; Zoltan Somogyi
Archive | 2016
Version; Fergus Henderson; Thomas C. Conway; Zoltan Somogyi; David Jeffery; Peter Schachte; Simon Taylor; Chris Speirs; Tyson Dowd; Ralph Becket; Mark Brown; Peter Wang
international symposium on memory management | 2002
Fergus Henderson