PiLisp
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
bindings.
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 sc
, as
well as how deeply coupled that mini Lisp is to the application
requirements of sc
, I don't think I'll ever try to refactor sc
to
use PiLisp instead. But certain design choices I had in mind for the
language in sc
definitely influenced the direction I've taken
PiLisp.
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.