Short list with things to finish for D2
Steven Schveighoffer
schveiguy at yahoo.com
Thu Nov 19 09:22:51 PST 2009
On Thu, 19 Nov 2009 12:01:25 -0500, dsimcha <dsimcha at yahoo.com> wrote:
> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s
> article
>> dsimcha wrote:
>> > == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s
>> article
>> >> Yes, it will be because the book has a few failing unittests. In
>> fact, I
>> >> was hoping I could talk you or David into doing it :o).
>> >> Andrei
>> >
>> > Unfortunately, I've come to hate the MRU idea because it would fail
>> miserably for
>> > large arrays. I've explained this before, but not particularly
>> thoroughly, so
>> > I'll try to explain it more thoroughly here. Let's say you have an
>> array that
>> > takes up more than half of the total memory you are using. You try
>> to append to
>> > it and:
>> >
>> > 1. The GC runs. The MRU cache is therefore cleared.
>> >
>> > 2. Your append succeeds, but the array is reallocated.
>> >
>> > 3. You try to append again. Now, because you have a huge piece of
>> garbage that
>> > you just created by reallocating on the last append, the GC needs to
>> run again.
>> > The MRU cache is cleared again.
>> >
>> > 4. Goto 2.
>> This is not a matter of principles, but one of implementation. When you
>> GC, you can adjust the cache instead of clearing it.
>
> Technically true, but what is a matter of principles is whether the
> implementation
> of arrays should be very tightly coupled to the implementation of the
> GC. Fixing
> this issue would have massive ripple effects throughout the already
> spaghetti
> code-like GC, and might affect GC performance. For every single object
> the GC
> freed, it would have to look through the MRU cache and remove it from
> there if
> present, too.
You perform the lookup via MRU cache (after mark, before sweep). I see it
as a single function call at the right place in the GC.
> The point is that this **can** be done, but we probably don't **want** to
> introduce this kind of coupling, especially if we want our GC model to
> be sane
> enough that people might actually come along and write us a better GC
> one day.
What about implementing it as a hook "do this between mark and sweep"?
Then it becomes decoupled from the GC.
-Steve
More information about the Digitalmars-d
mailing list