Half_Life version 0.1
Half_Life (460K) is a packaged version of the Life compiler as it existed
when DEC PRL was closed in September 1994. Half_Life was written
primarily by Richard Meyer and Bruno Dumant with guidance from Peter Van Roy and
support from the Paradise and Proteus projects at DEC PRL. The
development of Half_Life was partially funded by the ESPRIT project
ACCLAIM (PE7195). Half_Life
is copyright 1994 Digital Equipment Corporation and DFKI (Deutsches
Forschungszentrum fuer Kuenstliche Intelligenz). Non-commercial use
is free and encouraged.
Half_Life essentially implements the Login subset of Life (i.e.,
Prolog with psi-terms). Functions are supported syntactically, that
is, they can be defined, but they are called with unification instead
of matching. Half_Life compiles small programs correctly, but no
guarantees are given as to its suitability for anything except
research into implementation technology.
Half_Life has three innovative characteristics:
- It uses a novel technique, the RISC-macro technique, to
generate portable C code that approaches the speed of assembly code.
The idea is to generate macros that syntactically resemble RISC
instructions. The macros are defined in such a way that they are
compiled as RISC instructions. Control flow (functions and jumps) are
implemented with low overhead (<5%) and the generated C procedure
sizes are bounded, to be acceptable to the C compiler. GCC's global
register allocation ability is used to assign processor registers to
Life's run-time structures.
- It implements psi-term unification with performance competitive
to Prolog. It does this by providing two representations for
psi-terms, a static one (corresponding to Prolog's) and a dynamic one
(dynamically resizable hash table). The choice of representation is
made by the system at run-time, i.e., the representation starts as the
static one, and flips to the dynamic one if features (record fields)
are added to a term. Technically, Half_Life provides constructive
proof that open feature structures can be implemented as efficiently
as closed feature structures.
- It is written using the Wild_Life
preprocessor described in the Wild_Life user manual. This
preprocessor has been an enormous help in reducing the drudgery of
compiler writing. The preprocessor is a generalization of the
Extended DCG preprocessor used to build Aquarius Prolog.
Short questions about the Half_Life system can be addressed to myself
or to Richard Meyer
Questions about the parser and the Wild_Life preprocessor can
be addressed to Bruno Dumant
Please send all comments to email@example.com.
Last modified on Feb. 23, 1995.