Greetings!  This is just to document our current struggles with compiler
speed for any interested.

GCL makes heavy use of using function source code as an automatic type
propagator when inlined.  This is logically robust, but rather heavy in
compile time as the same subsidiary functions are compiled over and over
again.  To make compiler performance tolerable enough for release, we
implemented a 'memoization type scheme whereby the compiler could learn
from what it had done before and execute the same much more quickly when
seen again.  This was ugly in the sense that changes to the source code
would not automatically propagate unless the memoization was flushed,
but got us to the point we could support all the apps in 2.7.1 with net
performance gains to boot.

This memoization was also unfortunate as it implied an inevitable loss
of type specificity as previous results were applied to new overlapping
but not identical situations.  Worse, it would depend on the order in
which the compiler encountered certain forms, and since on most machines
GCL is built with high make -j, this order was not fixed.  This
essentially foiled the algorithm GCL uses to resolve signature
conflicts, leaving one unresolved conflict on certain Debian platforms
that blocked the ACL2 build there.

I'm closing this issue with the next commit, but the right answer
remains dispensing with the memoization and speeding up the compiler
sufficiently to process everything from the same fundamental sources.

Take care,
-- 
Camm Maguire                                        c...@maguirefamily.org
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to