D's greatest mistakes
Steven Schveighoffer
schveiguy at yahoo.com
Thu Dec 9 10:12:37 PST 2010
On Thu, 09 Dec 2010 12:01:47 -0500, Bruno Medeiros
<brunodomedeiros+spam at com.gmail> wrote:
> On 29/11/2010 21:13, Steven Schveighoffer wrote:
>> On Mon, 29 Nov 2010 15:55:10 -0500, Kagamin <spam at here.lot> wrote:
>>
>>> Steven Schveighoffer Wrote:
>>>
>>>> My favorite in recent times is:
>>>>
>>>> @tail const(C) tailconst;
>>>
>>> Tail const is a type constructor, but I don't think that annotations
>>> should evolve that far.
>>
>> What I liked about that is it is orthogonal to the constancy. That is,
>> with one annotation you get tail-const, tail-immutable, and tail-shared.
>>
>
> By saying that @tail is a type constructor, do you mean it can be
> applied to any const/immutable, anywhere they appear? Like, how do you
> declare a class var to be head-const and tail-immutable?
@tail immutable(const(T))
> Or an array of tail-const classes?
@tail const(C)[]
The @tail only applies to the modifier, not to the rest of it. It
modifies const.
BTW, this idea was shown to be too complex for use because of two things:
1. the prospect of having to define both const and @tail const member
functions is way too complex for normal people, and 2. member functions
*always* pass the 'this' pointer by reference on a struct, so you couldn't
call for instance an immutable function on a tail-immutable type.
-Steve
More information about the Digitalmars-d
mailing list