[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
enlightenment
Date: Thu, 22 Feb 90 22:38 EST
From: jka@vega.crd.ge.com (Jim Aragones)
Would anyone care to try and tell me why the first function takes over 5
minutes and about 800,000 words to compile, yet the second one, which
merely defines local functions to do the work, compiles instantly? It
is very annoying either having to wait an hour to compile a file OR
having to fill your code with bogus functions to get it to compile in a
reasonable amount of time.
The Symbolics code walker has some algorithms that are quadratic, or
perhaps even O(n^3), in the number of nested macros. By moving some of
the macros into separate functions you reduce the nesting.
One thing that sometimes helps is to make sure that the first form in
the body of a macro invocation or special form isn't a macro invocation.
Forms that allow declarations at the beginning of the body must expand
a macros there to see whether they expand into declarations; so, write
(let (...)
(declare ...) ;; declarations, if necessary
nil ;; no more declarations
(dw:with-output-as-presentation ...))
This doesn't fix the quadratic behavior, but it does reduce the
coefficient.
barmar