[gambit-list] Experimental tree-shaker
Marc Feeley
feeley at iro.umontreal.ca
Fri Oct 31 01:06:55 EDT 2008
I have implemented a simple quick-and-dirty tree-shaker for those
interested in experimenting with such a thing.
To try it out, update your Gambit to the latest sources. The tree-
shaker is disabled by default. To use it you must compile your
program this way:
% gsc -e '(set! c#targ-tree-shake? #t)' test.scm
The tree-shaker will only remove from a compiled file the procedures
which are not reachable *and* defined in the scope of a (declare
(block)). So if you compile this program:
(declare (block))
(define (f x)
(+ (* x x)
(- x 1)))
(define (g y)
(f (f y)))
(pp 123)
both f and g are eliminated. If the (pp 123) is changed to (pp (g
123)) then there is code generated for f, but ***not for g*** because
the compiler has inlined g so that the main call is really (pp (f (f
123))).
For the experimenter... implement a Scheme library in lib.scm and
compile your program like so:
(declare (block))
(include "lib.scm")
...your program here...
The last step is to link with a minimal Gambit runtime library
containing only _kernel.scm .
Marc
More information about the Gambit-list
mailing list