author | Alan Dipert
<alan@dipert.org> 2020-02-13 16:27:25 UTC |
committer | Alan Dipert
<alan@dipert.org> 2020-02-13 16:27:25 UTC |
parent | 2281859cc013249eef258f1bcbbd85767a3d258b |
paper/jacl-els-2020.tex | +19 | -18 |
diff --git a/paper/jacl-els-2020.tex b/paper/jacl-els-2020.tex index 8ba82e7..8e01155 100644 --- a/paper/jacl-els-2020.tex +++ b/paper/jacl-els-2020.tex @@ -82,7 +82,7 @@ easily overcome. Developers have responded to these challenges by creating a widening variety of special-purpose programming languages that compile to -JavaScript.\cite{Somasegar12,Czaplicki12,wiki:ReasonML} Each new +JavaScript \cite{Somasegar12,Czaplicki12,wiki:ReasonML}. Each new language promotes one or more paradigms, application architectures, or development workflows, and claim some advantage relative to the status quo. @@ -91,10 +91,10 @@ This paper presents one new such language, JavaScript-Assisted Common Lisp (JACL), an implementation of an extended subset of Common Lisp. Unlike contemporary languages, Lisp is closely associated with a -history of innovation in the field of large-scale UI development that -predates the existence of the Web.\cite{Cannon07,Garnet90} The design -of Common Lisp is informed by the lessons learned in pursuit of those -and other innovations. +history of innovation and success in the field of large-scale UI +development that predates the existence of the Web +\cite{Cannon07,Garnet90}. The design of Common Lisp is informed by the +lessons learned in pursuit of those and other innovations. The primary goal of the JACL project is to ease SPA development by applying Common Lisp --- a proven substrate for UI development success @@ -175,7 +175,7 @@ self-hosting, includes the major control operators, and integrates tightly with JavaScript. JSCL includes a reader, compiler, and printer, and evaluation is -performed by JavaScript's \texttt{eval} function. Between these, a +performed by JavaScript's \texttt{eval()} function. Between these, a Read Eval Print Loop (REPL) is possible, and the JSCL distribution includes a reference implementation of one. @@ -211,7 +211,7 @@ JSCL and SLip demonstrate that when the underlying reader facility is synchronous, a REPL cannot effectively be made available at run-time because of the asynchrony of input events in JavaScript. In the best case, the reader is only partially available through a pre-reader that -accumulates datums asynchronously. +accumulates characters asynchronously. \subsubsection{Compiler organization} @@ -261,9 +261,9 @@ performed by a JavaScript optimizer. \subsection{ClojureScript} A discussion of industrial Lisp technology in the SPA setting would be -incomplete without mention of ClojureScript.\cite{Cljs} ClojureScript +incomplete without mention of ClojureScript \cite{Cljs}. ClojureScript is probably the most successful Lisp dialect for building SPAs by -number of commercial users.\cite{CljsUsers}. +number of commercial users \cite{CljsUsers}. ClojureScript targets JavaScript, and is a dialect of an earlier language, Clojure\cite{Clojure}, which targets Java Virtual Machine @@ -323,7 +323,7 @@ Promises, iterators, async functions, async iterators, and the \texttt{await} keyword. These features simplify the JACL implementation and aid its -performance\cite{V8async}. It is hoped that JACL will eventually be +performance \cite{V8async}. It is hoped that JACL will eventually be written in itself, and that these features will be accessible from Lisp. @@ -410,14 +410,15 @@ Instead, JACL offers an alternative development REPL approach that requires minimal host tooling: the DevTools-based REPL. For each tab, Google Chrome is capable of hosting a WebSocket-based -debug endpoint that implements the DevTools Protocol.\cite{GDevTools} -The Chrome DevTools Protocol is a standard for JSON object interchange -over WebSocket that makes all of the browser's debugging facilities -available remotely, over the network. - -JACL takes advantage of this feature of Chrome in order to deliver a -command-line REPL client that may be run on the developer's host -machine. The workflow is the following: +debug server that implements the DevTools Protocol \cite{GDevTools}. + +DevTools Protocol clients may then connect to the server and interact +with the tab's environment, such as by evaluating arbitrary JavaScript +within the context of the tab. + +JACL leverages the DevTools Protocol to deliver a command-line REPL +client that may be run on the developer's host machine. The workflow +is the following: \begin{enumerate} \item Run Google Chrome from the shell with the \linebreak