
TUGboat, Volume 0 (9999), No. 0 draft: September 4, 2019 10:53 901
Quickref: Common Lisp reference
documentation as a stress test for Texinfo
Didier Verna
Abstract
Quickref is a global documentation project for the
Common Lisp ecosystem. It creates reference manu-
als automatically by introspecting libraries and gen-
erating corresponding documentation in Texinfo for-
mat. The Texinfo les may subsequently be con-
verted into PDF or HTML. Quickref is non-intrusive:
software developers do not have anything to do to
get their libraries documented by the system.
Quickref may be used to create a local website
documenting your current, partial, working environ-
ment, but it is also able to document the whole
Common Lisp ecosystem at once. The result is a
website containing almost two thousand reference
manuals. Quickref provides a Docker image for an
easy recreation of this website, but a public version
is also available and actively maintained.
Quickref constitutes an enormous and success-
ful stress test for Texinfo. In this paper, we give
an overview of the design and architecture of the
system, describe the challenges and diculties in
generating valid Texinfo code automatically, and put
some emphasis on the currently remaining problems
and deciencies.
1 Introduction
Lisp is a high level, general purpose, multi-paradigm
programming language created in 1958 by John Mc-
Carthy [
2
]. We owe to Lisp many of the programming
concepts that are still considered fundamental today
(functional programming, garbage collection, inter-
active development, etc.). Over the years, Lisp has
evolved as a family of dialects (including Scheme,
Racket, and Clojure, to name a few) rather than as a
single language. Another Lisp descendant of notable
importance is Common Lisp, a language targeting
the industry, which was standardized in 1994 [5].
The Lisp family of languages is mostly known
for two of its most prominent (and correlated) char-
acteristics: a minimalist syntax and a very high level
of expressiveness and extensibility. The root of the
latter, right from the early days, is the fact that
code and data are represented in the same way (a
property known as homoiconicity [
1
,
3
]). This makes
meta-programming not only possible but also trivial.
Being a Lisp, Common Lisp not only maintains this
property, but also provides an unprecedented arsenal
of paradigms making it much more expressive and
extensible than its industrial competitors such as
C
++
or Java.
Interestingly enough, the technical strengths of
the language bring serious drawbacks to its commu-
nity of programmers (a phenomenon aecting all the
dialects). These problems are known and have been
discussed many times [
4
,
7
]. They may explain, at
least partly, why in spite of its technical potential,
the Lisp family of languages never really took over,
and probably never will. The situation can be sum-
marized as follows: Lisp usually makes it so easy
to “hack” things away that every Lisper ends up de-
veloping his or her own solution, inevitably leading
to a paradox of choice. The result is a plethora of
solutions for every single problem that every single
programmer faces. Most of the time, these solutions
work, but they are either half-baked or targeted
to the author’s specic needs and thus not general
enough. Furthermore, it is dicult to assert their
quality, and they are usually not (well) documented.
As this situation is well known, the commu-
nity has been attempting to “consolidate” itself in
various ways. Several websites aggregate resources
related to the language or its usage (books, tuto-
rials, implementations, development environments,
applications, etc.). The Common Lisp Foundation
(
cl-foundation.org
) provides technical, sometimes
even nancial, support and infrastructure for project
authors. Once a year, the European Lisp Sympo-
sium (
european-lisp-symposium.org
) gathers the
international community, open equally to researchers
and practitioners, newcomers and experts.
From a more technical standpoint, solving the
paradox of choice, that is, deciding on ocial solu-
tions for doing this or that, is much more problem-
atic — there is no such thing as an ocial authority
in the community. On the other hand, some libraries
do impose themselves as de facto standards. Two of
them are worth mentioning here. Most non-trivial
Common Lisp packages today use ASDF for structur-
ing themselves (g.1 has an example). ASDF allows
you to dene your package architecture in terms of
source les and directories, dependencies and other
metadata. It automates the process of compiling and
loading (dependencies included). The second one is
Quicklisp (
quicklisp.org
). Quicklisp is both a cen-
tral repository for Common Lisp libraries (not unlike
CTAN) and a programmatic interface for it. With
Quicklisp, downloading, installing, compiling and
loading a specic package on your machine (again, de-
pendencies included) essentially becomes a one-liner.
One remaining problem is that of documenta-
tion. Of course, it is impossible to force a library
author to properly document his or her work. One
Quickref: Common Lisp reference documentation as a stress test for Texinfo