author | Alan Dipert
<alan@dipert.org> 2020-04-17 16:41:56 UTC |
committer | Alan Dipert
<alan@dipert.org> 2020-04-17 16:41:56 UTC |
parent | 64aa5e1fa4d2865e30218cebbdc8ee93ace8f0d1 |
Makefile | +1 | -1 |
README.md | +22 | -45 |
index.html.m4 | +1 | -1 |
index.md | +0 | -22 |
diff --git a/Makefile b/Makefile index eb60289..f90151e 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ CF_DIST := E6GOTXLS9MCZF all: jacl-dist.zip index.html $(PDFS) -%.html: %.html.m4 %.md +index.html: index.html.m4 README.md m4 $< > $@ %.pdf: %.tex $(BIB) diff --git a/README.md b/README.md index 43edbd9..31b35e8 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,22 @@ -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 then 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 running -their type checker than in running their program 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. Global names would also need to be installed using something like a -function call. - -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. +JACL is an experimental Lisp system for the Web browser platform in +early development. It was created by [Alan +Dipert](https://tailrecursion.com/~alan) to explore new techniques for +developing large-scale SPAs (Single Page Application) in Lisp. + +If you are interested in following JACL development progress, you may +sign up for the [JACL News](https://tinyletter.com/alandipert) e-mail +list to receive short, infrequent updates. Please don't hesitate to +direct any comments or questions about JACL you may have to the author +at [alan@dipert.org](mailto:alan@dipert.org). + +## Resources + +* [jacl-dist.zip](jacl-dist.zip) is the JACL distribution. It includes + usage instructions and source code. Source code is available under + the terms of the [MIT + License](https://opensource.org/licenses/MIT). Note that JACL is in + an early and primitive state and that application development is not + yet practical. +* [jacl-demo-els-2020.pdf](papers/jacl-demo-els-2020.pdf) explains the + motivation behind JACL, demonstrates its capabilities, and outlines + future work. diff --git a/index.html.m4 b/index.html.m4 index fed1949..bb9f25d 100644 --- a/index.html.m4 +++ b/index.html.m4 @@ -12,7 +12,7 @@ <header> <h1>JACL: JavaScript Assisted Common Lisp</h1> </header> - esyscmd(`pandoc index.md') + esyscmd(`pandoc README.md') </body> <footer>Last updated: esyscmd(`date')</footer> </html> diff --git a/index.md b/index.md deleted file mode 100644 index 31b35e8..0000000 --- a/index.md +++ /dev/null @@ -1,22 +0,0 @@ -JACL is an experimental Lisp system for the Web browser platform in -early development. It was created by [Alan -Dipert](https://tailrecursion.com/~alan) to explore new techniques for -developing large-scale SPAs (Single Page Application) in Lisp. - -If you are interested in following JACL development progress, you may -sign up for the [JACL News](https://tinyletter.com/alandipert) e-mail -list to receive short, infrequent updates. Please don't hesitate to -direct any comments or questions about JACL you may have to the author -at [alan@dipert.org](mailto:alan@dipert.org). - -## Resources - -* [jacl-dist.zip](jacl-dist.zip) is the JACL distribution. It includes - usage instructions and source code. Source code is available under - the terms of the [MIT - License](https://opensource.org/licenses/MIT). Note that JACL is in - an early and primitive state and that application development is not - yet practical. -* [jacl-demo-els-2020.pdf](papers/jacl-demo-els-2020.pdf) explains the - motivation behind JACL, demonstrates its capabilities, and outlines - future work.