git » jacl.git » commit b87c55b

readme

author Alan Dipert
2019-08-21 21:12:14 UTC
committer Alan Dipert
2019-08-21 21:12:14 UTC
parent f5430383d6aade252d5b4b1cd996a510ccff2845

readme

README.md +31 -0

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4c9fb63
--- /dev/null
+++ b/README.md
@@ -0,0 +1,31 @@
+JACL (JavaScript Assisted Common Lisp) is an experimental Lisp system for the web browser platform. It was created to explore new techniques for large-scale SPA (Single Page Application) development in Lisp.
+
+Specifically, the project goals are to:
+
+1. Implement a useful subset of CL
+2. Interoperate efficiently with JavaScript
+3. Host as much development tooling as possible in the browser so that tools may organically evolve with the applications they’re used to build
+4. Support the delivery of applications competitive in size and speed with respect to those produced by JavaScript tools
+
+Why not JavaScript?
+
+The JavaScript language is Lisp-like in that it is garbage-collected, dynamically typed, and multi-paradigm. However, developing applications incrementally in a REPL in the traditional Lisp way is not well supported because JavaScript does not have a system of first-class global names.
+
+JavaScript modules are files that represent a closure, and the entire file must be reloaded in order for the names exported by the closure to be re-instantiated. Dependent files must also be reloaded. The necessity of reloading whole programs after making small changes orients JavaScript toward batch development workflows traditionally associated with statically-typed languages (and away from the incremental workflows traditionally associated with Lisp).
+
+A testament to this trend is the growing popularity of JavaScript with type inference extensions. Despite JavaScript being manifestly typed, the JavaScript REPL experience is so impoverished that developers find more value in writing type descriptions than in running program fragments interactively.
+
+OK, so why not add first-class global namespaces/packages to JavaScript?
+
+A good namespace system could be built as a library, but because programs are filled with references to library functions — and because each reference would necessarily look like a field access or function call — the code would be quite noisy.
+
+Thus, a namespace system requires syntax support in order to be practical. The best syntax support possible, for anything, is Lisp syntax.
+
+OK, but why Common Lisp (CL)?
+
+In short: because it’s good enough. Despite its warts, CL is a well-specified and multi-paradigm language. Most importantly, it is a proven substrate for performing incremental development and prototyping new ideas.
+
+
+Special Variables
+
+Unwinding must happen in a finally block