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