mark-sweep
AGC
Our great sponsors
mark-sweep | AGC | |
---|---|---|
11 | 1 | |
702 | 10 | |
- | - | |
10.0 | 10.0 | |
almost 4 years ago | over 1 year ago | |
C | Ada | |
GNU General Public License v3.0 or later | - |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
mark-sweep
-
Let's Write a Malloc
Never forget:
https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
> Let me stress here that while this collector is simple, it isn’t a toy.
> There are a ton of optimizations you can build on top of this—in GCs and programming languages, optimization is 90% of the effort—but the core code here is a legitimate real GC.
> It’s very similar to the collectors that were in Ruby and Lua until recently.
> You can ship production code that uses something exactly like this.
> Now go build something awesome!
-
loxcraft: a compiler, language server, and online playground for the Lox programming language
Bob Nystrom also has a blog, and his articles are really well written (see his post on Pratt parsers / garbage collectors). I'd also recommend going through the source code for Wren, it shares a lot of code with Lox. Despite the deceptive simplicity of the implementation, it (like Lox) is incredibly fast - it's a great way to learn how to build production grade compilers in general.
-
The Garbage Collection Handbook, 2nd Edition
Bob Nystrom (of Game Programming Patterns, Crafting Interpreters, and dartfmt fame) also wrote a tutorial[1], of a precise as opposed to a conservative garbage collector.
Regarding register scanning, Andreas Kling has made (or at least quoted) an amusing observation[2] that your C runtime already has a primitive to dump all callee-save registers onto the stack: setjmp(). So all you have to do to scan registers is to put a jmp_buf onto the stack, setjmp() to it, then scan the stack normally starting from its address.
[1] https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
[2] https://youtu.be/IzB6iTeo8kk
-
Ask HN: Do you recall any book or course that made a topic finally click?
- http://journal.stuffwithstuff.com/2013/12/08/babys-first-gar...
-
Garbage Collection with LLVM
Might not be that hard: https://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/
- Baby’s First Garbage Collector (2013)
-
Reference Count, Don't Garbage Collect
To better understand garbage collection, nothing better than implementation. This article is such a joy to read:
https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
AGC
-
The Garbage Collection Handbook, 2nd Edition
There was this project though.
https://github.com/Roldak/AGC
The best part is that it's faster than manual management. People will tell you they need do to malloc and free manually for performance, but when you actually run the numbers GC wins for a majority of use cases.
What are some alternatives?
c-examples - Example C code
cactusref - 🌵 Cycle-Aware Reference Counting in Rust
zig.vim - Vim configuration for Zig
ixy-languages - A high-speed network driver written in C, Rust, C++, Go, C#, Java, OCaml, Haskell, Swift, Javascript, and Python
mmtk-core - Memory Management ToolKit
garbage-collector - the code from http://maplant.com/gc.html adapted to work on 64 bit
git-from-the-bottom-up - An introduction to the architecture and design of the Git content manager
bdwgc - The Boehm-Demers-Weiser conservative C/C++ Garbage Collector (bdwgc, also known as bdw-gc, boehm-gc, libgc)
swift - The Swift Programming Language
rust-gc - Simple tracing (mark and sweep) garbage collector for Rust