Jeremy DeHaan wrote:
Thank you all for the feedback.
I think I might still need a little more feedback as to what the project
should actually entail, but here's what it's looking like so far:
Implement lock free allocation using std.experimental.allocator's
freelists (SharedFreeList? It was the only thing in the documentation
that specifically mentions lock free allocation)
Implement a generational garbage collector
Implement precise garbage collection (possibly piggybacking off of
Rainer's work)
Does anyone think that might be too much to take on or does it sound
pretty good? I have other garbage collector things I'd like to explore,
but I they should probably go in the "if time allows" category at this
point.
Jeremy
If I may make a suggestion. The lock free work is unlikely to require
the entirety of GSoC. And the precise GC is the next most important
thing on your list and will have the biggest impact on GC performance.
Once the GC is fully precise we can implement a fully compacting GC,
which improves the usefulness of generational collection. Additionally,
precision allows a significant amount of work to be done in improving
the performance of the GC in multi-threaded scenarios. It should be
quite possible to avoid needing fork() or anything like it altogether. I
know that the .NET GC doesn't need to use anything like it.
Also, I would strongly recommend getting this book and reading it cover
to cover before starting:
http://www.amazon.com/gp/product/1420082795/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=1944687562&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0471941484&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=0QD9X3E5QATSBCBT6BMM
I think Rainer's Precise GC only dealt with Heap objects. What needs
work is Register and Stack scanning. Expanding on Rainer's existing
Precise GC work is the right idea, but Register and Stack scanning is a
very big project in it's own right.I suspect it will take up the
remainder of your GSoC time. :)
--
// Adam Wilson
// quiet.dlang.dev