Idea #1 on integrating RC with GC
Michel Fortin
michel.fortin at michelf.ca
Wed Feb 5 12:23:13 PST 2014
On 2014-02-05 18:26:38 +0000, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> said:
> On 2/5/14, 7:23 AM, Michel Fortin wrote:
>> I don't think it makes much sense. ARC when used for D constructs should
>> be treated an alternate GC algorithm, not a different kind of pointer.
>
> Why? The RC object has a different layout, so it may as well have a
> different type.
Well, it depends on your goal. If your goal is to avoid the garbage
collector, you need all language constructs to use ARC. Having a single
type in the language that relies on the GC defeats the purpose. What
you want is simply to replace the current GC with another implantation,
one that uses ARC. It shouldn't affect user code in any way, it's
mostly an implementation detail (managed by the compiler and the
runtime).
If your goal is to have a deterministic lifetime for slices in some
situations, then RCSlice as you proposes it is fine. That said, with a
library type you'll have a hard time making the optimizer elide
redundant increment/decrement pairs, so it'll never be optimal. I'm
also not sure there's a lot of use cases for a deterministic slice
lifetime working side by side with memory managed by the current GC.
To me it seems you're trying to address a third problem here: that
people have complained that Phobos relies on the GC too much. This
comes from people who either don't want the GC to pause anything, or
people who want to reduce memory allocations altogether. For the former
group, replacing the current GC with an ARC+GC scheme at the language
level, with the possibility to disable the GC, will fix most of Phobos
(and most other libraries) with no code change required. For the later
group, you need to make the API so that allocations are either not
necessary, or when necessary provide a way to use a custom an allocator
of some sort.
--
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca
More information about the Digitalmars-d
mailing list