The Vienna Abstract Machine
Andreas Krall and Ulrich Neumerkel
Institut für Computersprachen
Technische Universität Wien
Argentinierstraße 8
A-1040 Wien
{andi,ulrich}@complang.tuwien.ac.at
Abstract
The Vienna Abstract Machine (VAM) is a Prolog machine developed at the TU Wien.
In contrast to the standard implementation technique (Warren Abstract Machine -
WAM ), an inference in VAM is performed by unifying the goal and head
immediately, instead of bypassing arguments through a register interface. We
present two implementations for VAM: VAM2p and VAM1p. VAM2p is well suited for
an intermediate code emulator (e.g. direct threaded code) which uses two
instruction pointers for both goal code and head code. During an inference VAM2p
fetches one instruction from the goal code, and one instruction from the head
code and executes the combined instruction. More optimization is therefore
possible, since information about the calling goal and the head of the clause
is available at the same time. VAM performs cheap shallow backtracking, needs
less dereferencing and trailing and implements a faster cut. In a Prolog with
the occur-check, VAM omits many unnecessary operations. VAM1p is designed for
native code compilation. It combines instructions at compile time and supports
several optimizations, such as fast last-call optimization. In this paper we
present the VAM in detail and compare it with existing machines.