X-Git-Url: http://repo.macrolet.net/gitweb/?p=jscl.git;a=blobdiff_plain;f=README.org;h=bfa6cc6deec29d44fa76a473dad496e32ab4a6e5;hp=558385a44c24a9105ef548a275267e9fb5065c4f;hb=HEAD;hpb=2d227431f8ee11c329cb0f4981386f67fb912a43 diff --git a/README.org b/README.org index 558385a..bfa6cc6 100644 --- a/README.org +++ b/README.org @@ -1,4 +1,44 @@ -* Ecmalisp +* JSCL -Ecmalisp is a in-progress Lisp-to-Javascript compiler, which is -bootstrapped from Common Lisp and executed from the browser. + JSCL is a Common Lisp to Javascript compiler, which is bootstrapped + from Common Lisp and executed from the browser. + +** Getting started + +You can try a demo [[http://davazp.net/jscl/jscl.html][here]]. But if you want to hack JSCL, you will have +to download the repository + +=git clone git@github.com:davazp/jscl.git= + +/load/ jscl.lisp in your Lisp, and call the bootstrap function to +compile the implementation itself: + +=(jscl:bootstrap)= + +It will generate a jscl.js file in the top of the source tree. Now you +can open JSCL.html in your browser and use it. + +** Status + +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 + - Explicit control tranfers ([[http://www.lispworks.com/documentation/HyperSpec/Body/s_tagbod.htm][tagbody]] and [[http://www.lispworks.com/documentation/HyperSpec/Body/s_go.htm][go]]) + - Static and dynamic non local exit ([[http://www.lispworks.com/documentation/HyperSpec/Body/s_catch.htm][catch]], [[http://www.lispworks.com/documentation/HyperSpec/Body/s_throw.htm][throw]]; [[http://www.lispworks.com/documentation/HyperSpec/Body/s_block.htm][block]], [[http://www.lispworks.com/documentation/HyperSpec/Body/s_ret_fr.htm][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 compiler is very verbose, some simple optimizations or +/minification/ could help to deal with it. + +Most of the above features are incomplete. It is not so bad because +so the compiler is not too heavy, but it would be great if we were +just enough compliant to include a [[http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/code/iter/loop/mit/0.html][loop implementation]], a format +implementation, or even [[http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/oop/0.html][CLOS]] or non-CLOS OOP. + +/Feel free to hack it yourself/