Releases: kyren/gc-arena
v0.5.3
v0.5.2
v0.5.1
- Correct the behavior of
Arena::mark_debtandArena::mark_all
to do what their documentation suggest and do nothing during
CollectionPhase::Collecting - Implement
Collectforstd::collections::LinkedList - Make
StaticCollect<T>#[repr(transparent)], to support sound casting from
Gc<StaticCollect<T>>toGc<T>.
v0.5.0
This release adds the concept of "finalization" to arenas. At the end of the
"mark" phase, at the moment that an arena is considered "fully marked" and
is ready to transition to the "sweep" phase, the "fully marked" arena can be
examined with some special powers...
MarkedArena::finalize can be called to check which pointers are considered
"dead" for this collection cycle. A "dead" pointer is one that is destined
(without further changes) to be freed during the next "sweep" phase. You can
"resurrect" these pointers either through normal root mutation before entering
the "sweep" phase, or more simply by calling explicit resurrect methods
on those pointers. Any resurrection, whether through mutation or resurrect
methods, immediately makes the arena no longer fully marked, but the arena can
then be re-marked and re-examined.
This simple, safe API (examining a "fully marked" arena for potentially dead
pointers, performing mutation, then potentially re-marking and re-examining)
is enough to implement quite complex garbage collector behavior. It can be used
to implement "finalizer" methods on objects, "ephemeron tables", Java-style
"reference queues" and more.
Release Highlights
- New
FinalizationAPI. - New API to query the current phase of the collector.
- Fixup the pacing algorithm for correctness and simplicity. Makes
Pacing::with_timing_factor(0.0)actually work correctly for stop-the-world
collection. GcWeak::is_droppednow works only during collection, not mutation.- Add more trait impls to
StaticCollect. Gc::ptr_eqandGcWeak::ptr_eqnow ignore metadata ofdynpointers,
matching the behavior ofRc::ptr_eqandArc::ptr_eq.
v0.4.0
This release adds the ability to track external allocations (allocations
which are not stored in a Gc<T>) which also participate in pacing the garbage
collector. There is now a new (feature-gated) type allocator_api::MetricsAlloc
which implements the allocator-api2::Allocator trait which can be used to
automatically track the external allocation of collection types.
This release also adds (feature-gated) tracing support, which emits a span
per GC phase (propagate, sweep, drop), and events when collection resumes and
yields.
Release Highlights
- Tracked external allocations API which participates in GC pacing.
- Feature-gated support for a
allocator_api2::Allocatorimplementation that
automatically tracks allocation. - Feature-gated support for
hashbrowntypes, to automatically implement
Collecton them. - Feature-gated
tracingsupport. - Implement
CollectforBox<T: ?Sized>. - Add methods to project
Write<Option<T>>andWrite<Result<T, E>>. - Don't fail to build by trying to implement
CollectonArc<T>for platforms
withoutArc.
0.3.3
0.3.2
0.3.1
0.3
An enormous number of breaking API changes, too many to list, almost the entire
API has been rethought.
The credit goes mostly to others for the release, @Bale001, @Aaron1011,
@dragazo, and especially @moulins.
Release Highlights
- New
ArenaAPI that does not require macros and instead uses aRootable
trait and HRTBs for lifetime projection. - Methods on
Arenato directly mutate the root type and map the root from one
type to another. - A new API for 'static roots that are held in smart pointers
(DynamicRootSet). Gcpointers can now point to DSTs, and there is anunsize!macro for
unsizing coercions to replace the unstableUnsizetrait.- Weak pointers!
GcCellhas been replaced by explicit public lock types held withinGc
pointers with safe ways of mutating them.- Field projection on held lock types to allow for separate locks held within a
singleGcpointer to be safely mutated. - Unsafe
Gcpointer coercions to compatible pointee types. - Soundly get references to
Gctypes with&'gclifetime. - More ergonomic
MutationandCollectioncontext types. - Tons of correctness and soundness fixes.
This release also completely drops the gc-sequence combinator crate.
Because of other API changes, anything you could do with gc-sequence before
can almost certainly be expressed better either using the new 'static root API
or with the new map API. See this comment for a bit more info.