Reversible Javascript
A reversible interpreter provides some really interesting opportunities for exploration and learning programming. Reversibility makes it possible to scrub through the execution of algorithms, which you can see used to great effect in the Algorithm Wiki and in the depth-first traversal example below. The code that is highlighted on the left-hand side is the actual code that is running. Being able to scrub through the algorithm is not only fun, it transforms the experience of exploring the algorithm.