The Hume Project at Heriot-Watt University

  1. Project Name
  2. Introduction
  3. People
  4. Funding
  5. Resources

Hume - Higher-order Unified Meta-Environment

0. Project Name

The Hume project ran from around 2000 to 2013. The name was chosen to mark the skeptical philosophy of the highly influential Scottish Enlightenment philosopher David Hume. Hume was a racist and engaged in slavery. Had we been aware of this, we would not have chosen his name.
(added 14/9/20)

1. Introduction

This page provides information about and links to Hume activity at Heriot-Watt University within the Dependable Systems Group. The wider Hume project home page is here.

Hume is a novel programming language, intended for resource bounded domains, designed at Heriot-Watt University and the University of St Andrews. It is based on concurrent finite state automata controlled by pattern matching and recursive functions over rich types. Hume has been designed as a multi-level language, where different levels have different formal properties amenable to different analyses. HW-Hume is a relatively impoverished language of bits and tuples for characterising hardware, with decidable equivalence and termination, and predictable time and space behaviour. FSM-Hume introduces fixed precision abstractions over bit tuples, including integers, reals, strings and vectors, with associated operators and conditional constructs. This level, oriented to wider finite state machine-based designs, has strongly bounded time and space behaviour. HO-Hume augments FSM-Hume with a repertoire higher-order function with known cost models, such as map and fold, and user-defined non-recursive functions. PR-Hume extends HO-Hume with user-defined primitive recursive bounded functions and full Hume is a Turing Complete language.

Active areas of research include: the development of characterisation, time and space analyses for the different levels; the elaboration of a semantics-preserving refinement methodology from higher to lower levels, to improve the accuracy of costing; native code compilation for PC and embedded use; applications in image and vision processing, and control.

Current Hume implementations include a reference interpreter, available below, and an abstract machine with associated compiler. Current Hume costing tools include space analysers for HW-, FSM- and PR-Hume.

2. People

·         Dr Ben Gorry, RA, SEAS project (2006-7)


  • Chunxu Liu, PhD student, Provably correct Hume to Java compilation.
  • Ian Wallace, Nuffield Foundation Undergraduate Research Student (summer 2005)
  • James Wallace, EPSRC Undergraduate Research Student (summer 2008)
  • Valerie Gibson, EPSRCUndergraduate Research Student (summer 2008)

3. Funded Research

4. Resources

Hume Community

email forum


Hume Report 1.1 - PDF (449Kb)

Hume Manual 1.5 - PDF (287Kb)

Example Programs


Currently we provide binaries for OSX (10.4) and Red Hat Linux (2.6).

There are at least four ways of running Hume programs:

·                                 Using the Hume intepreter (known simply as 'hume')

·                                 Compiling Hume to HAM using 'phamc' and then:

o                                                        Using the HAM interpreter 'ehami'

o                                                        Using the HAM to C compiler 'hamc' (which links to the supplied RTS)

·                                 Using the Hume compiler 'humec', which uses a combination of the above to compile Hume to a C executable.

We also provide a tool for the live debugging of a compiled HAM program - 'hamdb'.

hume v0.2 (Hume Interpreter)

OSX PPC (1.23Mb)old May require GHC 6.4.1 to be installed

Linux x86 (845Kb) May require GHC 6.2.2 to be installed

phamc v0.8 (Prototype HAM Compiler)

OSX PPC (1.47Mb)old May require GHC 6.4.1 to be installed

Linux x86 (948Kb) Version 0.8t (May 2006)old May require GHC 6.2.2 to be installed

Linux x86 (1.43Mb) Version 0.2h (Feb 2008) May require GHC 6.4.2 to be installed

ehami (Extended HAM Interpreter)

OSX PPC (112Kb)

Linux x86 (38Kb)

humec (Hume Compiler - includes hamc & RTS)

OSX PPC (168Kb)old

Linux x86 (102Kb) Version 0.8t (May 2006)old

Linux x86 (165Kb) Version 0.2h (Feb 2008)

Linux x86 (1.69Mb) Version 1.0.0 (Apr 2008) - Includes recent phamc

Linux i386 (1.12Mb) Version 1.0.3 (Nov 2008) - Includes 32-bit phamc(rpm)

Linux x86_64 (1.23Mb) Version 1.0.3 (Nov 2008) - Includes 64-bit phamc(rpm)

Source Code for RTS (20Kb)Version 0.8t (May 2006) - optional, only required to target different architecture

Notes - PPT (40Kb)

hamdb (HAM DeBug)

Cross-platform (21Kb) Requires at least java 1.4

This page is maintained by Norman Scaife, Robert Pointon & Greg Michaelson - updated 21st February 2008