Review of DIP49

Timon Gehr timon.gehr at gmx.ch
Fri Feb 7 14:45:37 PST 2014


On 02/04/2014 08:53 PM, Andrei Alexandrescu wrote:
> This part:
>
>> Note that, currently D has 9 qualifiers:
>> - (mutable)
>> - const
>> - inout
>> - inout const (added from 2.065. See issue 6930)
>> - shared
>> - shared const
>> - shared inout
>> - shared inout const (added from 2.065. See issue 6930)
>> - immutable
>>
>> So, if we allow defining arbitrary postblit from A to B copy, you can
>> define 9 * 9 = 81 postblits!
>> I don't want to see such horrible D code.
>
> convinced me something has definitely gotten out of hand.

How so?

1. We have _4_ qualifiers. (DMD appears to implement them as 9 separate 
qualifiers which has led to problems such as not all combinations being 
implemented from the start.)

2. We can also overload a usual 1-argument/1-return function based only 
on qualifiers in the stated 81 ways. Why would this be unexpected or 
even noteworthy?

> We must devise a radically simpler solution to object copying,
> one that aims straight at solving the fundamental problems we're facing.
> Far as I can tell these are it:
>
> 1. Reference counting for all objects, including const/immutable/shared.
> ...
> 2. Removing head const. You have added the nice conversion qualified(T[]) -> qualified(T)[]
> upon calling a function. We must look at ways to allow the user a similar generalization for type constructors.
>
> If we figure this(this) doesn't help these two problems,

It doesn't help with 2.

> its entire existence must be put in question.

Make sure to keep it possible to mark structs non-copyable.


More information about the Digitalmars-d mailing list