D's greatest mistakes

Bruno Medeiros brunodomedeiros+spam at com.gmail
Fri Dec 10 10:00:01 PST 2010


On 09/12/2010 18:12, Steven Schveighoffer wrote:
> 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.
>

Ok, what about a head-const array of tail-immutable classes?

And would this be allowed: Foo!(@tail const(C)) ?

> 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

I was commenting on the syntax aspect only (because it actually seems 
quite bad to me, not very orthogonal). And both issues above would apply 
to any tailconst syntax, because they are really about tailconst itself.

-- 
Bruno Medeiros - Software Engineer


More information about the Digitalmars-d mailing list