JSCL is a Common Lisp to JavaScript compiler, which is bootstrapped from Common Lisp and executed from the browser.
You can try a demo online here, or you can install the JSCL npm package:
npm install -g jscl
to run jscl in NodeJS.
If you want to hack JSCL, you will have to download the repository
git clone https://github.com/jscl-project/jscl.git
Run npm install under the jscl directory, then run the build
script:
./make.sh
It will generate jscl.js and the rest of the distribution files in
the jscl/dist directory. Now you can open dist/index.html in your
browser and use it. To use in Node, node dist/jscl-node.js; to use
in Deno, deno --allow-env --allow-read dist/jscl-deno.js.
JSCL is and will be a subset of Common Lisp. Of course it is far from complete, but it supports partially most common special operators, functions and macros. In particular:
-
Multiple values
-
Static and dynamic non local exit catch, throw; block, return-from.
-
Lexical and special variables. However, declare expressions are missing, but you can proclaim special variables.
-
Optional and keyword arguments
-
SETF places
-
Packages
-
The
LOOPmacro -
CLOS
-
The
formatfunction -
Others
The compiler is very verbose, some simple optimizations or minification could help to deal with it.
Feel free to hack it yourself