Top 5
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Fri Oct 10 08:35:59 PDT 2008
Steven Schveighoffer wrote:
> "Andrei Alexandrescu" wrote
>> Sergey Gromov wrote:
>>> Fri, 10 Oct 2008 08:22:10 -0500,
>>> Andrei Alexandrescu wrote:
>>>> Sergey Gromov wrote:
>>>>> My T[] is useful when you want to recursively split a megabyte file
>>>>> into a couple thousands of tokens, and then modify some of those
>>>>> tokens. For that, your T[] must be lightweight, it must reference a
>>>>> bigger piece of data, and it must guarantee not to write anything into
>>>>> memory outside its boundaries.
>>>>>
>>>>> The Array is for appending. It must always own its memory. Therefore
>>>>> you should be able to pass it around by reference, so Array is a
>>>>> *class* and cannot be nearly as lightweight as T[].
>>>>>
>>>>> You see, many of their properties are orthogonal. If you drop one, you
>>>>> lose flexibility.
>>>>>
>>>>>> Besides, Array!(T) is not a good name for build-in type.
>>>>> Names are placeholders here, not an actual proposal.
>>>> What's wrong with making Array a library type?
>>> Well, I'd like
>>> new Object[15];
>>> to be immediately appendable and therefore a syntactic sugar for new
>>> Array!(Object)(15);
>> I have a nagging impression the syntax Array!(Object) strikes you as hard
>> on the hand and the eyes...
>>
>> Anyhow the syntax new Object[15] is idiotic because Object[15] is a type
>> in itself. The syntax makes it next to impossible to actually generate a
>> fixed-sized array dynamically.
>>
>> In fact here's a challenge for you. Please generate a pointer to an
>> Object[15] using new.
>
> struct StaticArray(T, int x)
> {
> T[x] arr;
> }
>
> Object[15] * x = &((new StaticArray!(Object, 15)).arr);
>
> lovely, no ;) I'd probably make a static function in the template to do it,
> if it was really important to do that...
>
> There may be a way to do it nicer with a template alias, but I'm not sure it
> will work.
auto a = (new Object[5][1]).ptr;
The new operator is the plague.
Andrei
More information about the Digitalmars-d
mailing list