marCsweep/README.md

63 lines
1.6 KiB
Markdown
Raw Normal View History

2024-08-19 15:46:35 -04:00
# marCsweep
A mark-and-sweep garbage collector written in C.
Includes a simple virtual machine and a custom `malloc` implementation
for creating, tracing, and freeing garbage.
2024-08-19 15:46:35 -04:00
## Building
Compiling the project should be relatively easy, even if you aren't familiar
with `make`.
Dependencies: `git`, `make`, and `gcc`.
2024-08-19 15:54:19 -04:00
2024-08-19 15:46:35 -04:00
```
git clone https://codeberg.org/andyscott/marCsweep.git
cd marCsweep
make release # or debug
2024-08-19 15:46:35 -04:00
```
That's it! Make will create the `bin` directory and place the finished
executable there.
Compiling with `clang` is also supported, just replace "gcc" with "clang" in the
first line of the `Makefile`. Also note that if you don't specify a target for
make (i.e. "release" or "debug") both will be built. Debug builds are placed in
the `debug` directory.
2024-08-19 15:46:35 -04:00
## Running
Once compiled, the program can be run with the following:
```
cd bin # or debug
./gc
```
The results of the test cases will be output to your terminal:
2024-08-21 15:24:13 -04:00
> test_int_alloc: PASS
test_pair_alloc: PASS
test_obj_count: PASS
test_pair_alloc: PASS
test_unreachable: PASS
test_auto_gc: PASS
If all six tests pass, then the library compiles correctly on your system and
should be ready for experimentation!
2024-08-19 15:46:35 -04:00
## Notes
This is a personal project that I am writing in my free time to learn more about
2024-08-20 20:20:04 -04:00
garbage collection. Thank you to [Robert
Nystrom](https://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/)
for the idea.
Sadly, it was this author's idea to extend the project by writing a custom
`malloc`. Perhaps I should have been lazy and used the preexisting definitions,
but where's the fun in that?