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
A program can use `make-arity-wrapper-procedure` to synthesize a
function that reports a given arity mask (without calling `compile`).
In addition, `set-arity-wrapper-procedure!` suports modifying the
implementation of a synthesized procedure. Although similar
functionality could be achieved with `(lambda args (apply (unbox proc)
args))`, an arity wrapper procedure can dispatch to another procedure
without allocating a list for the arguments.
The interpreter now uses an internal variant of arity wrappers to
cooperate with `procedure-arity-mask`.
original commit: 295255a326afbf3f120f95c2ccc6e95b74fdd5e2
Fixes problems that Kent pointed out, and tries a macro
instead of duplicating the source for sweeping records.
original commit: a6796ba13da33ec9f765d6129cfc26cc38f48ffc
Add optional beginning-line and beginning-column components to a
source object, so that line and column information can be recorded
independent of the file. Add `locate-source-object-source` to use
the recorded information. Add a cache for `locate-source` as enabled by
the `use-cache?` optional argument, which can avoid compilation times
that are quadratic in the number of `let-values` or `define-values`
forms.
original commit: b36fab81d5041a54ce01a422395eee79d2f930bc
Revert the use of ephemeron pairs in weak hashtables, since the
difference is visible via guardians. Add hashtable based on ephemerons
(to avoid key-in-value problems) as an explicit variant.
original commit: 31ac6d78592e1a9ba6bfbe802260e3d56d4cf772
been seen on the pending list rather than the trigger lists.
gc.c
removed scan of space_ephemeron from check_heap because check_heap
as written can't handle the two link fields properly.
gcwrapper.c
in the ephemerons mat that checks interaction between mutation and
collection, added generation arguments to the first two collect
calls so they always collect into the intended generation.
4.ms
updated allx and bullyx patches
patch*
original commit: 43b54f64949cf992e52cf18bacc2a09f4a199227
to simplify ($fxu< (most-positive-fixnum) e) => (fx< e 0) so we
don't have any incentive in special casing length checks where
the maximum length happens to be (most-positive-fixnum).
5_4.ss, 5_6.ss, bytevector.ss, cmacros.ss, cp0.ss, cpnanopass.ss,
mkheader.ss, primdata.ss, prims.ss,
fasl.c, gc.c, types.h
root-experr*, patch*
original commit: 9eb63deda025fd4560b54746b21a881c01af46d6
is a fixnum and added meta-asserts to verify that it is in a couple of
others, to facilitate future changes to vector typing. vectors are
now treated essentially like fxvectors, strings, and bytevectors.
cmacros.ss, cpnanopass.ss, prims.ss, mkheader.ss,
alloc.c, gc.c, scheme.c
original commit: 564542d32bbae6b33cef808613238d5a4a2a8ee2