Persistent list

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Sat Nov 14 08:05:10 PST 2015


On 11/13/2015 07:28 PM, Jakob Ovrum wrote:
> On Friday, 13 November 2015 at 23:10:04 UTC, Andrei Alexandrescu wrote:
>> * Lines 11-12: I came to terms with the notion that some types cannot
>> be made immutable. We've been trying to do reference counting on
>> immutable objects for a long time. It's time to acknowledge that true
>> immutability (which the immutable keyword models) and reference
>> counting don't mix.
>
> External reference counting should work fine with immutable, i.e.
> RefCounted!(immutable T).

I've been asking this same question myself, vaguely, many times. 
Whenever I want to get work done using that mindset, I can't. Then I 
bring it up to Walter, and he asks again the same. Then I don't know how 
to explain it. Time to nip it in the bud once and for all. Clarify it 
forever so no need to bring it up again, ever.

The general pattern goes like this: "So okay, understood, immutable 
doesn't work with reference counting. Then, clearly what we need is an 
object with an immutable part and a mutable part! Instead of 
immutable(RC!T), we use RC!(immutable T) throughout. It has a mutable 
reference count and an immutable Problem solved!"

Technically, that clearly works. There's a problem with scaling it up:

COMPOSITION

Disallowing immutable(RC!T) in favor of RC!(immutable T) effectively 
disables composition of larger immutable objects from smaller ones.

One obvious thing to do is with a reference counted object it to make it 
a field of a larger object. That effectively makes that larger object 
impossible to be used with immutable, transitively.

That's not a bad thing; it's merely a factual acknowledgment that in the 
D programming language, immutable models (transitively and in a way that 
makes composition possible) true immutability of bits, which makes 
sharing possible at no cost. Reference counting is mutating, therefore 
it does not and cannot work with immutability as defined by D.

So disabling immutable(RC!T) in favor of RC!(immutable T) is a fine way 
to approach things, but not a solution to the general problem of making 
general reference counted D objects mutable. That problem does not have 
a solution.


Andrei



More information about the Digitalmars-d mailing list