I've built a command-line REPL called
sc, designed to drive
Shortcut's API. During that process I
built a small, intentionally limited Clojure-like Lisp
language as the user interface.
To give you a taste of how limited the Lisp in
sc is: It supports
global bindings with an impoverished version of
def, but it has no
let form; you have to use functions to get lexically-scoped
So I decided to replace this wing-snipped Lisp with a more complete implementation that provides an experience closer to Clojure, and thus was born PiLisp.
PiLisp is interpreted. It is written in Dart. The core language runs on any target that Dart does, with separate projects in the works that take fuller advantage of platform-specific functionality.
I am still in the middle of porting parts of Clojure to PiLisp. As the README warns:
Alpha. Much works, much may change.
Given how far PiLisp has come compared to what is built into
well as how deeply coupled that mini Lisp is to the application
sc, I don't think I'll ever try to refactor
use PiLisp instead. But certain design choices I had in mind for the
sc definitely influenced the direction I've taken
Check out future posts in the PiLisp feed for details about the implementation, design choices, adherence to and departure from Clojure semantics, the experience of building this with Dart, and hopefully some interesting applications.