SLip — a Lisp system in JavaScript
This is a Lisp system in JavaScript, the goal being to be able to run Lisp in a browser.
Update: the project has been renamed SLip, but I didn't redo the screencast. If you want to follow the steps in the demo, you now need to type "SL" (that's the main package name) instead of "SS".
Features
- Self-hosting compiler
- Lexical and dynamic variables
- tagbody, throw/catch, block/return, unwind-protect
- First-class continuations (not to be used with unwind-protect though)
- Separate function/variable namespace (that might be a “misfeature”, depending how you look at it).
- Tail call optimization
- Common Lisp-like package system
- Tons of primitive functions
- A simple “foreign function interface” for writing functions in JavaScript
- Most basic datatypes are unboxed—strings, numbers, arrays, regexps—so they can be freely passed around to JavaScript functions
- Literal regexps (seriously)
- Simple scheduler to emulate threads
- Contains a port of TinyCLOS object system (it's pretty slow for now)
- Condition system based on TinyCLOS (only handler-bind and handler-case for now)
- Very basic error detection (warns about undefined functions/variables)
- An in-browser development environment inspired by Emacs and SLIME.
Live demo
Note that this requires you to allow popups for this website, because the IDE shows up in a new window after the Lisp system is initialized. Tested with Chrome and Firefox only.