Using a tree representation enables sharing to avoid a quadratic-sized
compiled form and intermediate quadtraic-time/space representations
for a program like this one, where there are N calls each with an
average of N/2 live variables:
(define vars
(let loop ([i 10000])
(cond
[(zero? i) '()]
[else (cons (gensym) (loop (sub1 i)))])))
(time
(begin
(compile
`(lambda ,vars
,@(map (lambda (v) `(,v)) vars)))
(void)))
Keeping the variables in tree form (since they're already collected
that way) and memoizing reduces on the tree allows sharing to be
constructed and preserved. The tree approach persists even to the
runtime mask for live variables.
original commit: 35942accb14d1226189605548a9e05ca95e3f0b6
test and ephemeron gc test while resensitizing the former
8.ms, 4.ms
various formatting and comment corrections
workarea,
s/Mf-base, bytevector.ss, cpnanopass.ss, date.ss,
5_6.ms, examples.ms
original commit: 19e2505fc6477fce2d1d0e61187bd504b58ea994
an existing setting will not interfere with the build process, and
added a note to BUILDING that CHEZSCHEMELIBDIRS should be unset in
Version 9.5 and before.
s/Mf-base, mats/Mf-base, BUILDING
original commit: 1cccd56693911a38ece784da677e35f724950700
- added a cast to eliminate warnings in c/number.c
- fixed bug in Windows version of directory-separator-predicate in s/6.ss when path-* procedures are passed a path that is not a string.
- fixed bug in s/cp0.ss on Windows with $foreign-wchar?.
- fixed spelling of non-existent
original commit: dd1b741f7572cb0d5a6210c7c796aee7c4026040