Migrating an existing more modern GC to D's gc.d
Dmitry Olshansky
dmitry.olsh at gmail.com
Tue Apr 10 06:43:28 UTC 2018
On Tuesday, 10 April 2018 at 06:10:10 UTC, David Bennett wrote:
> On Tuesday, 10 April 2018 at 05:26:28 UTC, Dmitry Olshansky
> wrote:
>> On Monday, 9 April 2018 at 19:50:16 UTC, H. S. Teoh wrote:
>>> Last I remembered, you were working on a GC prototype for D?
>>
>> Still there, but my spare time is super limited lately, the
>> other project preempted that for the moment.
>>
>>> Any news on that, or have you basically given it up?
>>
>> Might try to hack to the finish line in one good night, it was
>> pretty close to complete. Debugging would be fun though ;)
>
> I was thinking about messing with the GC in my free time just
> yesterday... how hard would it be:
>
> Add a BlkAttr.THREAD_LOCAL, and set it from the runtime if the
> type or it's members are not shared or __gshared.
>
> Then we could store BlkAttr.THREAD_LOCAL memory in different
> pages (per thread) without having to setting a mutex. (if we
> need to get new page from the global pool we set a mutex for
> that)
Lost immutable and that thread-local is often casted to
immutable, sometimes by compiler.
See assumeUnique and its ilk in Phobos.
Same with shared - it’s still often the case that you allocate
thread-local then cast to shared.
Lastly - thanks to 0-typesafety of delegates it’s trivial to
share a single GC-backed stack with multiple threads. So what you
deemed thread-local might be used in other thread, transitively
so.
D is thread-local except when it’s not.
>
> If thats possible we could also Just(TM) scan the current
> thread stack and mark/sweep only those pages. (without a stop
> the world)
>
That is indeed something we should at some point have. Needs
cooperation from the language such as explicit functions for
shared<->local conversions that run-time is aware of.
> And when a thread ends we could give the pages to the global
> pool without a mark/sweep.
>
> The idea is it works like it does currently unless something is
> invisible to other threads, Or am i missing something obvious?
> (quite likely)
Indeed there are ugly details that while would allow per thread
GC in principle will in general crash and burn on most
non-trivial programs.
More information about the Digitalmars-d
mailing list