Top 5

KennyTM~ kennytm at gmail.com
Fri Oct 10 09:14:53 PDT 2008


Steven Schveighoffer wrote:
> "Benji Smith" wrote
>> Andrei Alexandrescu 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.
>>
>>    // nice
>>    x.setOutputBuffer(new char[64]);
>>
>>    // not so nice
>>    char[64] buffer;
>>    x.setOutputBuffer(buffer);
>>
>> Personally, I'd love to see the distinction between static arrays and 
>> dynamic arrays disappear. (The compiler can do whatever it wants behind 
>> the scenes, but usually I just don't care which is which, and I'd prefer a 
>> unified syntax.)
>>
>> I think *all* arrays should be declared like this:
>>
>>    T[] array = new T[n];
>>
>> If "n" is known it compile time, then D can use CTFE to create a static 
>> array, and if "n" isn't known until runtime, it can create a dynamic 
>> array. But as the user, I don't want to care which is which.
> 
> What if n is 10000?  It's small enough that it could be stack allocated, but 
> large enough that you might not want it to do that.
> 

I think this is implementation dependent. DMD for example limits the 
size to some power of 2 between 10k and 300k (forgotten the exact number 
;) )

>> (And I don't see how the distinction in the type-system between T[] and 
>> T[3] is useful.)
> 
> It tells you the scope of where to allocate data.  But once declared, usage 
> should be identical.  Currently there are some quirks in the language that 
> make this not true (which should be fixed).  e.g. you can't return static 
> arrays from functions.
> 
> -Steve 
> 



More information about the Digitalmars-d mailing list