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)

and 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.

Open demo.