Top 5

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Oct 10 13:09:09 PDT 2008


Steven Schveighoffer wrote:
> "Andrei Alexandrescu" wrote
>> Jarrett Billingsley wrote:
>>> On Fri, Oct 10, 2008 at 11:54 AM, Benji Smith <dlanguage at benjismith.net> 
>>> wrote:
>>>
>>>>> new T[x] is a brain-dead syntax that I wish Walter hadn't imported in 
>>>>> the
>>>>> first place.
>>>> Really? I think it's very valuable.
>>>>
>>>> The "new T[x]" syntax lets you construct an array as an RValue. Without 
>>>> that
>>>> syntax, you have to declare an array before using it.
>>> No, what he's getting at is that "new T[x]" does not mean "allocate a
>>> statically-sized array", it means "allocate a dynamically-sized
>>> array".  "new T" for any T should mean "allocate a T", not "allocate
>>> something that's kind of close to a T."
>>>
>>> What Andrei is implying, then is that for dynamic arrays, we should
>>> have to use the (already-legal) "new T[](n)" form, and "new T[x]"
>>> would mean to allocate a statically-sized array on the heap.
>> Well yah but I think this will confuse people coming from C++. I just wish 
>> new was abolished entirely:
>>
>> struct S {}
>> auto a = S();
>> auto b = Object();
>> auto c = char[](15);
>> auto d = char[15]();
>>
>> So in general Type followed by "(" ...optional arguments... ")" yields a 
>> value.
> 
> to clarify (for myself mostly), you are implying:
> 
> typeof(a) == S *

typeof(a) = S just like now

> typeof(b) == Object

yah

> typeof(c) == char[]

yah, and 15 chars get allocated

> typeof(d) == char[15]*

just char[15].

> Is that correct?
> 
> What is the syntax for allocating a struct on the stack using a constructor?

Library call

S * pS = allocate!(S)(... optional args ...);

> It does look more appealing.  That's a really really big change though :)
> 
> Not sure anyone uses it, but what about parameters to new?  I suppose you 
> could just write another function that does it.

Maybe parameters to new are an even better illustration for how poor 
that syntax is. Much energy is expended on explaining the vagaries of 
new syntax in C++... and what is there to it? Nothing. Allocate memory. 
Plop an object in it. That's pretty much it.


Andrei



More information about the Digitalmars-d mailing list