The generated Lisp code is heavily abstracted by macros which have access to information that is potentially useful to a Lisp compiler. It would be straight-forward in principle to provide macro implementations for several dialects of Lisp. We currently provide only Common Lisp [21] versions of the macros, Standard Lisp [18] and Scheme [19] were also considered in their design.
Macros are used to provide low-level type information is given for all variables. All operations are implemented in terms of monomorphic macros (for example, fixnum ``+'' uses a different macro than double precision ``+''.) The Common Lisp implementation uses all this information to produce fully proclaimed code which a good Lisp compiler can use to avoid all run-time type tests.
As discussed earlier, some Lisp systems do provide mechanisms for linking foreign functions. It would therefore be possible, in principle, to instead generate C code and use the foreign function interfact to link the resulting objects into the Lisp system. This, however, would be highly unportable accross different Lisp systems and would suffer all the drawbacks described in Section 1.