SaaSHub helps you find the best software and product alternatives Learn more →
Gc-arena Alternatives
Similar projects and alternatives to gc-arena
-
-
CodeRabbit
CodeRabbit: AI Code Reviews for Developers. Revolutionize your code reviews with AI. CodeRabbit offers PR summaries, code walkthroughs, 1-click suggestions, and AST-based analysis. Boost productivity and code quality across all major languages with each PR.
-
-
-
-
-
-
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
-
-
-
-
-
-
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
gc-arena discussion
gc-arena reviews and mentions
-
Crafting Interpreters with Rust: On Garbage Collection
Just for reference, the gc-arena crate (https://github.com/kyren/gc-arena) we use in Ruffle's Actionscript 1/2/3 interpreters and across the entire engine, does this. As far as we know, it's safe and sound, at the cost of some limitations, mainly: to compile-time prevent sweeping while holding onto Gc references, every struct and function touching Gc objects passes an extra 'gc lifetime. And not being able to run the GC at arbitrary time can be major issue depending on what you're doing; in Ruffle we incrementally collect between frames and pray that no single frame will ever allocate enough to OOM in the middle of it :)
And yeah, RefCells everywhere.
-
I built a garbage collector for a language that doesn't need one
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.
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
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
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 | 8 Feb 2025
Stats
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.