While many implementations are based on the Warren Abstract Machine, or at least on models directly derived from this design, in recent years some novel execution models have been proposed, which substantially differ from the WAM. Two of the most successful ones are BinProlog [105] and the Vienna Abstract Machine (VAM) [69].
BinProlog: Developed by P. Tarau, BinProlog is based on the idea of continuation passing. Prolog programs are transformed into binary logic programs--i.e. Prolog programs with at most one literal in the body. This is realized by making explicit the transfer of the continuation of each subgoal, as a new argument.
BinProlog has been implemented as a heap-only system (i.e., no concept of environment is introduced). The fact that the abstract machine has been specialized to binary programs allowed to considerably reduce the number of instructions required and facilitated the introduction of a wide variety of optimizations.
Vienna Abstract Machine: The Vienna Abstract Machine (VAM) developed by A. Krall maintains in many aspects the spirit of the WAM, curing some of the drawbacks in the original Warren's design. In particular, Krall's observation is that one of the main sources of inefficiency in the WAM is represented by the separation between the phase in which the arguments of a subgoal are prepared and the phase in which head unification is performed. The original design of VAM (called VAM ) is based on an architecture with two instruction pointers. These are used to combine argument setup and head unification in a unique step (by fetching two instructions at the same time, one coming from the goal and one from the head of the clause). Furthermore the selection of the kind of action required is made very efficient by using a special instruction coding, which allows to identify the desired action by simply adding the codes of the two instructions fetched.