Issues in Implementing Logic Languages
Abstract
How does one go about implementing a new logic language? What are the
principles underlying simple and efficient implementations? What is the
quickest way to build a fast system? How does one avoid reinventing the
wheel? This talk provides answers to these and other questions. The
talk is divided into three parts: high-level issues, Prolog implementation
issues, and general implementation techniques. Examples are taken from
various logic languages, including constraint languages. The talk
provides a plethora of information that will be helpful to both the
novice implementor and the experienced practitioner.
For more information, see the
foundation of Aquarius Prolog
and the
Half_Life compiler.
This talk presents and justifies three important ideas:
- It is easy to implement a new logic language using existing tools.
There are a variety of techniques and tools one can use, depending
on the trade-off one is looking for: getting a new system up and
running quickly, getting a reasonably efficient system running quickly,
or achieving interoperability and the best efficiency.
- Primitive constraints should be at the heart of the implementation.
They are useful as the basis of the abstract machine, as the compiler
intermediate language, and as the heart of code generation and
abstract interpretation. This simplifies the design while making no
compromises regarding execution efficiency.
- Prolog implementation technology has come a long way since
the publication of the WAM in 1983.
The simplification principle, which is at the heart of this advance,
has been applied more and more thoroughly, and the end is not yet
in sight.
For all practical purposes,
Prolog performance has caught up with imperative languages.
Introduction
High-Level Issues
Prolog Implementation Issues
Some General Implementation Techniques
Conclusion
Please send all comments to vanroy@dfki.uni-sb.de.