
While most interpreters and debuggers step the code statement-by-statement, Source interpreter breaks it down to the expression level. Time travelling is possible by making Source interpreter state immutable.
We eliminate JavaScript features such as non-strict equality, hoisting, variadic arguments, null values, syntax and semantics that might cause confusion for beginners.
Students start with a small, purely functional subset of JavaScript. As the learning progress, more features such as list data structure are introduced gradually. Eventually, imperative programming constructs such as objects and loops are added.
We added a sanitizer phase after parsing to make sure students only used allowed language features.
Error messages should be educating, not fighting back. We tried our best to make every errors, syntax or semantic, to have a human friendly explanation and suggestion for fixing them.