# Looking for a list of historically significant virtual or abstract machines for Prolog

**URL:** <https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200>\
**Category:** General\
**Created:** [February 9, 2023, 10:28am UTC](https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200 "2023-02-09T10:28:59Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [February 9, 2023, 10:28am UTC](https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200/1 "2023-02-09T10:28:59Z")

</div>

Out of curiosity went looking for a list of historically significant virtual or abstract machines for Prolog and really could not find one.

The problems in searching are

- They are sometimes listed with virtual machines like JVM making it hard to tell if it was for Prolog.
- Seem to all use the word `abstract` in their name which is often associated with `virtual` in the results so they get lost in the noise.
- WAM is basically the only one mentioned in many results and even in research papers that talk about many abstract or virtual machines.
- Unless you know of a few others such as BAM, VAM and SLG-WAM you can not even give examples to help the search. Even then that does not get much better results.
- Sometimes you find a larger list but from years ago that oftens include many research machines that were only just that.

Here are some that I am aware of, what are others.

- BAM (Bytecode Abstract Machine) is a low-level virtual machine used by many Prolog systems to execute Prolog code. It provides a platform-independent representation of Prolog code, allowing Prolog programs to be executed on any machine that has a BAM interpreter.

- WAM (Warren Abstract Machine) is another popular virtual machine used by Prolog systems. It was developed by Alan Warren and is widely used for its efficiency and flexibility. The WAM is used to execute compiled Prolog code, and it provides a platform-independent representation of Prolog code.

- VAM (Virtual Abstract Machine) is another virtual machine used by Prolog systems. Like the BAM and WAM, it provides a platform-independent representation of Prolog code and is used to execute compiled Prolog code.

- SLG-WAM (Stratified Logic Programming WAM) is a variant of the WAM that is optimized for use with constraint logic programming. The SLG-WAM provides efficient support for constraint solving and has been used in a wide range of applications, including natural language processing, constraint solving, and theorem proving.

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [February 9, 2023, 1:29pm UTC](https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200/2 "2023-02-09T13:29:55Z")

</div>

This might give you some of what you’re looking for: [1983-1993: The Wonder Years Of Sequential Prolog Implementation](https://core.ac.uk/download/pdf/82041494.pdf) by Peter Van Roy. I found it from [Google Scholar’s page for Peter Van Roy](https://scholar.google.com/citations?user=3PTvYzQAAAAJ&hl=en). The original Postscript seems to be here: [https://www.info.ucl.ac.be/~pvr/official\_report.ps](https://www.info.ucl.ac.be/~pvr/official_report.ps) and his [home page](https://www.info.ucl.ac.be/~pvr/cvvanroy.html) has a link to the Aquarius compiler.

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [February 9, 2023, 1:52pm UTC](https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200/3 "2023-02-09T13:52:44Z")

</div>

Thanks.

That was one of the papers I found in checking. It was so good I checked if it was [listed](https://swi-prolog.discourse.group/t/useful-prolog-references/1089#history-27) in Useful Prolog References, it was.

IIRC it was where I found VAM.

It was a very informative paper and also noted:

- VLSI-BAM
- PLM

One thing that was hard in a cursory search of the paper was that the word _machine_ is often used, but does that mean a _physical machine_, _virtual machine_ or _abstract machine_. You have to read each section in detail to know which is correct when used.

It is also a very old paper: 1994.

* * *

- SICStus Prolog—the first 25 years  
– SICStus Abstract Machine (SAM) and RISCified SAM (RISS) (Haygood 1994).

- The BinProlog Experience: …  
– BinWAM

Working my way down the list of references from _Reinventing_ paper

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [February 9, 2023, 2:14pm UTC](https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200/4 "2023-02-09T14:14:45Z")

</div>

I assume you’ve looked at the [SWI-Prolog bibliography](https://www.swi-prolog.org/pldoc/man?section=bibliography) – it has pointers to a few abstract machines (including the one that SWI-Prolog is based on: Bowen _et al_)

And, off the top of my head: [A Hitchhiker’s Guide to Reinventing a Prolog Machine](https://www.cse.unt.edu/~tarau/research/2017/eng.pdf) (and there are some other papers and slides by Paul Tarau, e.g. on BinProlog). See also the references in the _Reinventing_ paper.

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [February 9, 2023, 2:21pm UTC](https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200/5 "2023-02-09T14:21:35Z")

</div>

> [@peter.ludemann](#):
>
> I assume you’ve looked at the [SWI-Prolog bibliography](https://www.swi-prolog.org/pldoc/man?section=bibliography)

Thanks.

Not yet because I have been through many of those papers a few times and know there is only a handful of such machines noted in those papers that made it into a production system and I think I have them all in the list and also know that Jan W. could tell me of one not in my list faster than I can search all of them. 🙂

> [@peter.ludemann](#):
>
> A Hitchhiker’s Guide to Reinventing a Prolog Machine

That is one I don’t ever recall seeing, will visually scan it for info.

> [@peter.ludemann](#):
>
> See also the references in the _Reinventing_ paper.

Thanks, will run that down.

---

<div class="post-metadata">

**Author:** ![rryley](https://avatars.discourse-cdn.com/v4/letter/r/6f9a4e/32.png) [@rryley](https://swi-prolog.discourse.group/u/rryley)\
**Post date:** [February 11, 2023, 10:39pm UTC](https://swi-prolog.discourse.group/t/looking-for-a-list-of-historically-significant-virtual-or-abstract-machines-for-prolog/6200/6 "2023-02-11T22:39:54Z")

</div>

This post is interesting as I was curious if there was a Prolog book akin to Christian Queinnec’s Lisp in Small Pieces.

The SWI manual states it is based on the [ZIP Virtual Machine](https://www.swi-prolog.org/pldoc/man?section=implhistory).

An early paper describing it:

> **[W. F. Clocksin. The ZIP Virtual Machine. January 1983, with subsequent...](https://www.softwarepreservation.org/projects/prolog/edinburgh/doc/Clocksin-ZIP_VM-1983_01.pdf/view)**
>
> W. F. Clocksin. The ZIP Virtual Machine. January 1983, with subsequent revisions. \[By this time, Clocksin was at Oxford or Cambridge.\]
> 
> “Prolog-X is an implementation of Prolog which makes use of an abstract (virtual) machine called the ZIP...
