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