[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