The Javascript interpreter used to run the algorithms on this wiki is a fully reversible, standards-compliant, meta-circular Javascript interpreter. As well as running in the browser and allowing algorithms to be visualised, it can run code both forwards and backwards in time. It is written in continuation passing style, so that the interpretation can be paused and controlled by the user.

Based on Narcissus.

ES5.1 Compliance

It currently passes 99% of the ECMAScript Language test262 test suite.

Reversibility

And can optionally be run in a reversible mode, where state changes are recorded so that they can be undone. This allows much more informative visualisations and interaction, at the cost of running slightly slower and a bit more memory.

In reversible mode almost all state changes can be undone. Some state changes such as Object.freeze() and Object.seal() are not reversible at the moment as the interpreter uses the browser’s Javascript objects and the effects of these functions are permanent.