git » jacl.git » commit 0b166bd

stuff

author Alan Dipert
2020-02-07 05:59:03 UTC
committer Alan Dipert
2020-02-07 05:59:03 UTC
parent b4395d4d1b8f19f0054e8e9ab88bd431d224eb1f

stuff

paper/jacl-els-2020.tex +172 -47

diff --git a/paper/jacl-els-2020.tex b/paper/jacl-els-2020.tex
index daab1fa..ea79dfe 100644
--- a/paper/jacl-els-2020.tex
+++ b/paper/jacl-els-2020.tex
@@ -44,15 +44,25 @@
 %% The abstract is a short summary of the work to be presented in the
 %% article.
 \begin{abstract}
-  Single-page Web Applications (SPAs) are an increasingly popular
-  technique for implementing responsive Web-based User Interfaces
-  (UIs). SPAs are most commonly implemented in JavaScript.
-
+  Single-page Web Applications (SPAs) remain a popular technique for
+  implementing responsive Web-based User Interfaces (UIs). Google's
+  GMail, introduced in 2007, was one of the first well-known
+  SPAs. SPAs are most commonly implemented in JavaScript (JS) or with
+  a language that compiles to JavaScript. Despite their ubiquity, SPAs
+  continue to present a wide set of challenges to application
+  developers, and implementation techniques vary widely.
+  
   In this paper I introduce JavaScript-Assisted Common Lisp (JACL), a
-  new Web-browser based implementation of an extended subset of 
-  Common Lisp. JACL promotes an interactive,
-  incremental, and bottom-up approach to developing SPAs in the Lisp
-  tradition. JACL is incomplete, but development is active and ongoing.
+  new Web-browser based implementation of an extended subset of Common
+  Lisp (CL). JACL, which is incomplete and under active development,
+  is an attempt to ease SPA development by facilitating the use of CL.
+
+  %% \begin{enumerate}
+  %%   \item Support efficient compilation and application delivery
+  %%   \item Integrate tightly with the Web browser platform, and
+  %%   \item Promote an interactive, incremental, and bottom-up approach
+  %%     to development in the Lisp tradition
+  %% \end{enumerate}
 
   %%project goals are to:
 
@@ -132,47 +142,162 @@
 \section{Introduction}
 
 The demand for SPAs in the past decade has only grown. Users and
-stakeholders continue to expect higher and higher degrees of scale and
-sophistication from SPA implementors.
+stakeholders continually expect larger and more sophisticated SPAs.
 
 SPA implementors have responded by creating a widening variety of
-special-purpose frameworks and programming languages informed by
-large-scale development experience. Each of these tools promotes one
-or more paradigms, application archictures, or workflows, and claim
-some advantage relative to the status quo.
-
-This paper presents one new such tool, JACL. However, as an
-implementation of an extended subset of Common Lisp (CL), JACL is
-informed not just by contemporary experience, but also by the sum of
-experience with Lisp since 1957 and through to its eventual
-specification as Common Lisp in 1994.
-
-CL was designed for cross-platform compatibility and its package
-system does not require access to a file system. Consequently, despite
-various limitations imposed by the browser's security model, JACL can
-support a compelling --- albeit degraded --- interactive development
-experience.
-
-CL was designed for efficient implementation, and so JACL can be
-efficient. JACL code compiles nearly directly to JavaScript (JS). Very
-few compiler optimizations are necessary for the performance of JACL
-code to compare favorably to similar code written in other
-compile-to-JS languages.
-
-Finally, CL is easily extended, and so JACL can offer fluent access to
-the JavaScript platform, browser APIs, and APIs provided by 3rd party
-JavaScript libraries. CL's syntactic extensibility also distinguishes
-JACL as a means to rapidly prototype Domain-Specific Languages (DSLs),
-such as those that might be designed for composing UIs, dataflow
-primitives, or for some other special purpose.
-
-Limitations inherent in the browser platform, and a conscious decision
-not to attempt to mitigate them for performance reasons, mean that
-JACL will never be a complete implementation of CL. However, it is
-hoped that despite its incompleteness, and after planned work is
-finished, JACL may offer a satisfying Lisp development experience and
-serve as ``building material'' for a new generation SPA implementation
-tools and techniques.
+special-purpose programming languages. Each new language promotes one
+or more paradigms, application architectures, or development
+workflows, and claim some advantage relative to the status quo.
+
+This paper presents one new such language, JavaScript-Assisted Common
+Lisp (JACL). As an implementation of an extended subset of Common Lisp
+(CL), JACL is informed not just by the author's SPA development
+experience, but also by the sum of experience with Lisp since 1957
+through its specification as ANSI Common Lisp in 1994.
+
+While the Web barely existed in 1994, and JS didn't exist at all until
+1995, many of the challenges inherent in large-scale industrial
+application development were known long before the advent of the
+Web. The design of CL is filled with hard-won knowledge about how to
+overcome these challenges and rapidly build high-quality,
+high-performance applications.
+
+The primary goal of the JACL project is to ease the task of SPA
+development by applying the design of CL to the challenges faced by
+implementors. JACL is envisioned as the means to that goal, and as a
+practical, modern implementation that integrates tightly with the Web
+browser platform.
+
+In this paper, I will describe JACL's design and the current state of
+its implementation. Then, I will outline remaining work, including
+tentative features to support optimized application delivery.
+
+\section{Previous Work}
+
+\subsection{Parenscript}
+
+\subsection{SLip}
+
+\subsection{JSCL}
+
+\subsection{ClojureScript}
+
+%% To date, most of the work undertaken in pursuit of this goal has been
+%% that which is necessary to support two traditional Lisp workflows:
+%% interactive development and application delivery.
+%% 
+%% 
+%% with respect to current and future support of the interactive
+%% development and application delivery workflows.
+%% 
+%% Each of these workflows implies a particular set of implementation
+%% capabilities. In this paper, I will outline and rationalize the design
+%% of JACL with respect to how 
+%% 
+%% previous and contemporary analogues when applicable. Then, I will
+%% outline plans for future work.
+%% 
+%% Relative to most contemporary languages that compile to JavaScript,
+%% JACL takes a distinctive approach to supporting the interactive
+%% development workflow. The JACL reader, compiler and as many ancillary
+%% tools as possible are designed to run in the Web browser, in the same
+%% execution environment as the application under development. This is an
+%% effort to promote the the creation of development tools as natural
+%% by-products of the wider application development activity.
+%% 
+%% In contrast to historical residential Lisp systems, JACL does not
+%% imply a particular editor, nor does it provide facilities for storing
+%% and distributing source code files. Instead, JACL will necessarily
+%% rely on at least two categories of tool that must run outside of the
+%% Web browser. One is a REPL client for interacting with the JACL system
+%% from the command-line, such as fromk
+%% 
+%% 
+%% 
+%% 
+%% 
+%% This ensures that a full JACL development environment 
+%% 
+%% For example, the interactive development workflow implies the
+%% availability of a Read Eval Print Loop (REPL) and of a package system
+%% that may be queried and dynamically modified. Development also
+%% necessarily involves loading source code files from disk.
+%% 
+%% The application delivery workflow implies careful consideration of the
+%% runtime system, because in a SPA context applications are downloaded
+%% by browsers on demand, and network speeds are not yet universally
+%% fast. 
+%% 
+%% are best mapped to JavaScript language and runtime features.
+%% 
+%% 
+%% The designers of CL could not have anticipated the particular
+%% idiosyncrasies of JavaScript or of the Web platf
+%% 
+%% 
+%% 
+%% 
+%% 
+%% 
+%% 
+%% Principally, JACL is an effort to overcome the SPA implementation
+%% challenges of today by bringing CL's hard-won
+%% 
+%% 
+%% bring the knowledge CL represents,
+%% in the form of its implementation, to bear in a modern setting ---
+%% that of SPA implementation in 2020.
+%% 
+%% 
+%% 
+%% 
+%% Fortuitously, they are the same as those
+%% faced by contemporary SPA implementors.
+%% 
+%% was designed to help mitigate cetain inherent, timeless
+%% challenges that large-scale development on any platform is certain to
+%% present. The most direct mitigation proposed by 
+%% 
+%% the difficulties inherent in large-scale application development
+%% were well known to the designers of CL.
+%% 
+%% 
+%% The nature of these difficulties is no different in the SPA setting, and so the remedies suggested by CL 
+%% 
+%% CL was heavily influenced by many of the same challenges to
+%% large-scale application development faced by SPA implementors today.
+%% 
+%% And, while the specific indiosyncrasies of the browser platform would have been impossible for the CL designers to anticipate, 
+%% 
+%% 
+%% 
+%% .
+%% CL was designed for cross-platform compatibility and its package
+%% system does not require access to a file system. Consequently, despite
+%% various limitations imposed by the browser's security model, JACL can
+%% support a compelling --- albeit degraded --- interactive development
+%% experience.
+%% 
+%% CL was designed for efficient implementation, and so JACL can be
+%% efficient. JACL code compiles nearly directly to JavaScript (JS). Very
+%% few compiler optimizations are necessary for the performance of JACL
+%% code to compare favorably to similar code written in other
+%% compile-to-JS languages.
+%% 
+%% Finally, CL is easily extended, and so JACL can offer fluent access to
+%% the JavaScript platform, browser APIs, and APIs provided by 3rd party
+%% JavaScript libraries. CL's syntactic extensibility also distinguishes
+%% JACL as a means to rapidly prototype Domain-Specific Languages (DSLs),
+%% such as those that might be designed for composing UIs, dataflow
+%% primitives, or for some other special purpose.
+%% 
+%% Limitations inherent in the browser platform, and a conscious decision
+%% not to attempt to mitigate them for performance reasons, mean that
+%% JACL will never be a complete implementation of CL. However, it is
+%% hoped that despite its incompleteness, and after planned work is
+%% finished, JACL may offer a satisfying Lisp development experience and
+%% serve as ``building material'' for a new generation SPA implementation
+%% tools and techniques.