36 lines (29 with data), 1.8 kB
There are a number of hacks that I've used to make the system work
that even I can see are ugly. Some which come to mind..
It's dependent on being compiled in a rigid sequence, all in a single
compilation pass, particularly in the cross-compilation phase.
There's very little support for compiling modules in parallel
or recompiling the system incrementally.
The way the cross-compiler uses UNCROSS is ugly.
The heavy use of %PYTHON:DEFMACRO to construct basic macros is
arguably ugly. But it's better than what I tried before that, and the
system is still slightly contaminated with fallout from what I tried..
When I was first trying to bootstrap the system, I went off on a wild
goose chase of trying to define everything (even fundamental macros
like DEFUN and DEFMACRO) in terms of ordinary functions and Lisp
special operators. I later realized that I could do without this, but
a number of the changes that I made to the code while on that chase
still live on, and the code is unnecessarily unclear because of them.
The contrapuntal intertwingling of the cross-compiler and
target Lisp build sequences is, well, baroque.
Using host floating point numbers to represent target floating point
numbers, or host characters to represent target characters, is theoretically
shaky. (The characters are OK as long as the characters are
in the ANSI-guaranteed character set, though.)
Despite my attempts to make the compiler portable, it still makes assumptions
about the cross-compilation host Common Lisp:
Simple bit vectors are distinct from simple vectors (in
DEFINE-STORAGE-BASE and elsewhere). (Actually, I'm not sure
that things would really break if this weren't so, but I
strongly suspect that they would.)
SINGLE-FLOAT is distinct from DOUBLE-FLOAT.