Contents
Vendored crates
gc/ and gc_derive/ are the rust-gc tracing garbage collector,
https://github.com/Manishearth/rust-gc, tag v0.5.1 (commit 292287d),
from the gc 0.5.1 / gc_derive 0.5.0 crates on crates.io. The source is
logically identical to upstream except the iterative-marking change documented
in CHANGES.md; it has since been run through cargo fmt so the whole
workspace passes cargo fmt --check (whitespace only — no logic change).
License: Mozilla Public License 2.0 (LICENSE, copied from the upstream
repository; the crates.io package does not include it). The MPL is a file-level
copyleft: the files in gc/ and gc_derive/ stay under the MPL-2.0, including
our modifications to them, and their source must remain available. It places no
requirement on the rest of this repository, which keeps its own licenses.
Why vendored
The upstream collector marks through Trace::trace recursively, so marking a
long chain of Gc objects uses Rust stack proportional to the chain’s length.
mino builds every list as a chain of cons cells, so a live list of a few
thousand elements overflowed the stack during a collection in a debug build,
and nested data a few hundred thousand deep did so in release builds. We change
marking to use an explicit worklist. See CHANGES.md for every modification.