## Phase 1
-An implementation of the Warren Abstract Machine in Rust, done
+Produce an implementation of the Warren Abstract Machine in Rust, done
according to the progression of languages in [Warren's Abstract
Machine: A Tutorial
Reconstruction](http://wambook.sourceforge.net/wambook.pdf).
-Phase 1 has been completed, in that rusty-wam implements in some form
+Phase 1 has been completed in that rusty-wam implements in some form
all of the WAM book, including lists, cuts, Debray allocation, first
-argument indexing, and conjunctive queries.
+argument indexing, last call optimization and conjunctive queries.
## Phase 2
nice to have in the future. They'd make a good project for anyone wanting
to contribute code to rusty-wam.
-1. Add the global analysis techniques of Peter van Roy's thesis, "Can
-Logic Programming Execute as Fast as Imperative Programming?"
+1. Implement the global analysis techniques described in Peter van
+Roy's thesis, "Can Logic Programming Execute as Fast as Imperative
+Programming?"
-2. Add unum representation and arithmetic, as described in Gustafson's
-book "The End of Error."
+2. Add unum representation and arithmetic, using either an existing
+unum implementation or an ad hoc one. Unums are described in
+Gustafson's book "The End of Error."
-3. Add support for shift/reset delimited continuations, see "Delimited Continuations
-for Prolog."
+3. Add support for shift/reset delimited continuations, see "Delimited
+Continuations for Prolog."
-4. Add an incremental compacting garbage collector the heap.
+4. Add an incremental compacting garbage collector for the heap.
-5. Add a concurrent atom table.
+5. Add concurrent tables to manage shared references to atoms and
+strings.
+
+6. Add optional SLG resolution for fast memoization of predicates.
+
+7. Add some form of JIT predicate indexing.
## Built-in predicates