gc-arena

Incremental garbage collection from safe Rust (by kyren)

Gc-arena Alternatives

Similar projects and alternatives to gc-arena

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a better gc-arena alternative or higher similarity.

gc-arena reviews and mentions

Posts with mentions or reviews of gc-arena. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-08-14.
  • I built a garbage collector for a language that doesn't need one
    3 projects | news.ycombinator.com | 14 Aug 2023
    I'm going to point out one potential footgun with your library: circularly-linked Drops.

    If you have values A and B, both instances of T that implement Drop and hold a Gc to one another, then either A sees a dropped B or B sees a dropped A, and you get UB. Technically this isn't a problem because you already marked it as an unsafe trait, but your documentation should also mention this problem.

    You have a safe derive macro for Collectable, however, so it needs to reject Drop. This is possible with some weird macro magic[0].

    For those wondering, while Python doesn't have UB, it used to enforce the same rules until PEP 442[1]. Circularly linked garbage that implemented __del__ would instead get stored in sys.gc.garbage and you'd have to go in there and break references on __del__ types. However, native code objects will actually still trigger this behavior[2] presumably to avoid UB.

    I have no clue if Java finalizers need to worry about this.

    [0] In Ruffle we use gc_arena as our garbage collector. It enforces no_drop in it's Collect derive macro. See: https://github.com/kyren/gc-arena/blob/master/src/gc-arena-d...

    Actually, I lied: no_drop is one of two safe constraints you can use Collect with. The alternative is require_static, which only works because gc_arena treats the entire GC heap as a data structure that is owned and has a lifetime that all Gc pointers borrow. This doesn't work for dumpster, though, so ignore it.

    [1] https://peps.python.org/pep-0442/

    [2] https://docs.python.org/3/library/gc.html#gc.garbage

  • Make a LISP in Rust tutorial starting tomorrow.
    4 projects | /r/learnrust | 21 Dec 2022
    I foresee some potential problems with this approach. I would recommend trying to find an arena-based GC crate that you could use. gc-arena looks promising, although I haven't tried it — it seems to be built for your specific use case.
  • Implementing a safe garbage collector in Rust
    2 projects | /r/rust | 12 Apr 2022
    gc-arena uses closures to create "mutation sessions" where you are allowed to mutate the heap (see example).
  • GhostCell: Separating Permissions from Data in Rust
    2 projects | /r/rust | 31 Mar 2021
    One example of the second approach is the gc-arena library- see the implementation of the make_arena! macro.
  • A note from our sponsor - SaaSHub
    www.saashub.com | 5 May 2024
    SaaSHub helps you find the best software and product alternatives Learn more →

Stats

Basic gc-arena repo stats
4
394
8.2
14 days ago

kyren/gc-arena is an open source project licensed under Creative Commons Zero v1.0 Universal which is not an OSI approved license.

The primary programming language of gc-arena is Rust.


Sponsored
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com