author | Alan Dipert
<alan@dipert.org> 2020-02-07 05:59:03 UTC |
committer | Alan Dipert
<alan@dipert.org> 2020-02-07 05:59:03 UTC |
parent | b4395d4d1b8f19f0054e8e9ab88bd431d224eb1f |
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.