git » jacl.git » commit cef60cb

Various updates

author Alan Dipert
2020-04-17 15:41:50 UTC
committer Alan Dipert
2020-04-17 15:41:50 UTC
parent 60f096742d9dbcb11f2b584adbc87de1bd4ba773

Various updates

Makefile +20 -0
index.html.m4 +18 -0
index.md +22 -0
repl-client/jacl => jacl +0 -0
repl-client/jacl-client.R => jacl-client.R +0 -0
index.html => jacl.html +0 -0
{paper => papers}/.gitignore +0 -0
{paper => papers}/ACM-Reference-Format.bst +0 -0
{paper => papers}/Makefile +0 -0
{paper => papers}/acmart.cls +0 -0
{paper => papers}/jacl-demo-els-2020.tex +29 -28
{paper => papers}/jacl-els-2020.bib +0 -0
{paper => papers}/jacl-els-2020.tex +0 -0
style.css +30 -0

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0c6d8eb
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,20 @@
+.PHONY: all clean
+
+SHELL := /bin/bash
+DIST_FILES := RUN.md jacl.html boot.lisp jacl-tests.lisp qunit-2.9.2.css qunit-2.9.2.js jacl jacl-client.R
+
+%.html: %.html.m4 %.md
+	m4 $< > $@
+
+all: jacl-dist.zip index.html
+
+jacl-dist.zip: $(DIST_FILES)
+	rm -f $@
+	mkdir -p $(basename $@)
+	cp -R $^ $(basename $@)
+	zip $@ -r $(basename $@)
+
+clean:
+	rm -f jacl-dist.zip
+	rm -rf jacl-dist
+	rm -f index.html
diff --git a/index.html.m4 b/index.html.m4
new file mode 100644
index 0000000..fed1949
--- /dev/null
+++ b/index.html.m4
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <title>JavaScript Assisted Common Lisp</title>
+  <link rel="stylesheet" href="style.css"/>
+</head>
+
+<body>
+  <header>
+    <h1>JACL: JavaScript Assisted Common Lisp</h1>
+  </header>
+  esyscmd(`pandoc index.md')
+</body>
+<footer>Last updated: esyscmd(`date')</footer>
+</html>
diff --git a/index.md b/index.md
new file mode 100644
index 0000000..31b35e8
--- /dev/null
+++ b/index.md
@@ -0,0 +1,22 @@
+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/repl-client/jacl b/jacl
similarity index 100%
rename from repl-client/jacl
rename to jacl
diff --git a/repl-client/jacl-client.R b/jacl-client.R
similarity index 100%
rename from repl-client/jacl-client.R
rename to jacl-client.R
diff --git a/index.html b/jacl.html
similarity index 100%
rename from index.html
rename to jacl.html
diff --git a/paper/.gitignore b/papers/.gitignore
similarity index 100%
rename from paper/.gitignore
rename to papers/.gitignore
diff --git a/paper/ACM-Reference-Format.bst b/papers/ACM-Reference-Format.bst
similarity index 100%
rename from paper/ACM-Reference-Format.bst
rename to papers/ACM-Reference-Format.bst
diff --git a/paper/Makefile b/papers/Makefile
similarity index 100%
rename from paper/Makefile
rename to papers/Makefile
diff --git a/paper/acmart.cls b/papers/acmart.cls
similarity index 100%
rename from paper/acmart.cls
rename to papers/acmart.cls
diff --git a/paper/jacl-demo-els-2020.tex b/papers/jacl-demo-els-2020.tex
similarity index 89%
rename from paper/jacl-demo-els-2020.tex
rename to papers/jacl-demo-els-2020.tex
index 608c7a2..0596d89 100644
--- a/paper/jacl-demo-els-2020.tex
+++ b/papers/jacl-demo-els-2020.tex
@@ -84,14 +84,11 @@ JACL. Lisps that have either demonstrated industrial utility or that
 implement a significant subset of Common Lisp are surveyed in appendix
 \ref{appendix:lisps}. Like many of these related efforts, JACL
 includes an online, optimizing compiler and supports interoperation
-with JavaScript. These Lisps, and most other SPA implementation
-languages, are delivered as tools primarily designed to be run in the
-host environment, instead of in the target Web browser environment
-where compiled applications ultimately do. JACL distinguishes itself
-from these efforts by placing special emphasis on the value of
-\emph{residential} development style, where both applications and the
-tools used to create them co-evolve in a shared environment. JACL
-provides fundamental support for residential development with its
+with JavaScript. JACL distinguishes itself from these efforts by
+placing special emphasis on the value of \emph{residential}
+development style, where both applications and the tools used to
+create them co-evolve in a shared environment. JACL provides
+fundamental support for residential development with its
 \emph{asynchronous reader}.
 
 \section{Interoperation with JavaScript}
@@ -125,9 +122,8 @@ and Valtan\cite{valtanGitHub} make the same tradeoff.
 JACL functions are JavaScript functions, and may be invoked by
 JavaScript callbacks without a special calling convention. JavaScript
 functions named as Lisp values may be invoked with \texttt{FUNCALL} or
-\texttt{APPLY}. As opposed to JSCL, neither arguments nor return
-values are automatically coerced to or from any particular set of
-object types.
+\texttt{APPLY}. Neither arguments nor return values are automatically
+coerced to or from any particular set of object types.
 
 \subsection{Operators}
 
@@ -212,28 +208,28 @@ browser.
 
 Development of JACL itself is currently driven primarily by modifying
 \texttt{jacl.js} and the \texttt{boot.lisp} and
-\texttt{jacl-tests.lisp} Lisp scripts. The Lisp test scripts are
-included in the \texttt{index.html} file in the JACL
+\texttt{jacl-tests.lisp} Lisp scripts. The Lisp scripts are included
+in the \texttt{jacl.html} file in the JACL
 distribution\cite{JACLDistribution}. After each modification, the Web
 browser is reloaded, and test results are displayed.
 
-This workflow is characteristic of the traditional JavaScript
-development workflow and has served JACL development so far. However,
-it requires runtime parsing and compilation of JACL source code, among
-other inefficiencies. Reloading the Web browser also destroys the
-entire runtime environment.
+This Lisp script-based workflow is similar to the traditional
+JavaScript development workflow and has served JACL development so
+far. However, Lisp scripts require runtime parsing and compilation of
+JACL source code, among other inefficiencies. Reloading the Web
+browser also destroys the entire runtime environment.
 
 The easiest way to create JACL programs in this manner is to start
-with the \texttt{index.html} Web page provided by JACL and then modify
+with the \texttt{jacl.html} Web page provided by JACL and then modify
 it by removing or adding new Lisp scripts.
 
 It is imagined that ultimately, Lisp sources will be incorporated into
 the Lisp \emph{image} exclusively by the REPL client tool. An
 arrangement such as this decouples source code loading from the Web
 browser lifecycle. Production executables may then be produced at any
-time from the Lisp image by a Lisp function in a manner similar to the
-\texttt{SAVE-LISP-AND-DIE}\cite{SBCLManual} function in SBCL or the
-\texttt{DELIVER}\cite{LispWorksDeliver} function in LispWorks.
+time from the Lisp image using a Lisp function in a manner similar to
+the \texttt{SAVE-LISP-AND-DIE}\cite{SBCLManual} function in SBCL or
+the \texttt{DELIVER}\cite{LispWorksDeliver} function in LispWorks.
 
 \subsection{REPL}
 
@@ -284,12 +280,17 @@ integrating the REPL into the development workflow.
 \section{Future Work}
 
 JACL currently lacks many basic Common Lisp data types, functions, and
-operators, and the resulting programming experience is challenging and
-wholly impractical. JACL should support as much of Common Lisp as is
-possible, accounting for the brutal limitations imposed by JavaScript
-and the Web platform. Fortunately, the many other existing Common
-Lisps that compile to JavaScript demonstrate that a compelling
-implementation \emph{is} possible.
+operators. Ultimately, JACL should support as much of Common Lisp as
+is possible, accounting for the severe limitations imposed by
+JavaScript and the Web platform. Fortunately, the many other existing
+Common Lisps that compile to JavaScript demonstrate that a compelling
+implementation is achievable.
+
+An in-browser REPL and other tools for interacting with the JACL
+runtime in the Web browser would be desirable. Such tools could
+optionally remain as parts of deployed applications and provide a
+degree of introspection and extension capability even after the
+application has been deployed.
 
 Other than work related to missing features such as multiple values,
 CLOS, and the conditions system, much design work remains with regard
diff --git a/paper/jacl-els-2020.bib b/papers/jacl-els-2020.bib
similarity index 100%
rename from paper/jacl-els-2020.bib
rename to papers/jacl-els-2020.bib
diff --git a/paper/jacl-els-2020.tex b/papers/jacl-els-2020.tex
similarity index 100%
rename from paper/jacl-els-2020.tex
rename to papers/jacl-els-2020.tex
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..fe070eb
--- /dev/null
+++ b/style.css
@@ -0,0 +1,30 @@
+body {
+  margin: 40px auto;
+  max-width: 800px;
+  line-height: 1.4;
+  font-size: 1.1em;
+  padding: 1em;
+  /* background-color: #eee; */
+  /* border-radius: 18px; */
+  /* border: 1px solid #aaa; */
+  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
+}
+
+h1 {
+  text-align: center;
+}
+
+h1,h2,h3 {
+  font-family: serif;
+  font-weight: lighter;
+  color: #cc3b12;
+}
+
+header > h1 {
+  margin-top: 0;
+}
+
+footer {
+  text-align: center;
+  font-style: italic;  
+}