The demise of T[new]

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Oct 19 09:16:50 PDT 2009


Leandro Lucarella wrote:
> Andrei Alexandrescu, el 19 de octubre a las 10:18 me escribiste:
>>> 2 types should be provided: array and slice.
>>>
>>> array is a *real* type, storing and owning memory, it should be something
>>> like this (conceptually):
>>>
>>> class array(T)
>>> {
>>> 	size_t length;
>>> 	size_t capacity;
>>> 	T[capacity] elements;
>>> }
>> At the point I introduce arrays I hadn't described classes.
> 
> You are talking about the book, right? You don't have to! You can explain
> arrays without talking about classes at all!

I was just replying to your suggestion.

>> One major problem with writing a "The X Programming Language" book
>> is sequencing. It's very easy to explain a complicated feature if
>> the listener knows all others. It is very difficult to introduce
>> them serially.
> 
> I don't think an array would be the case, come on! =)
> 
>>> 1) a pure reference type.
>>> 2) 1 allocation only (interior pointers are not a problem, the GC have to
>>>   support them anyways).
>>> 3) easily appendable (capacity field).
>>>
>>> slice should be something like this:
>>>
>>> struct slice(T)
>>> {
>>> 	size_t length;
>>> 	T* ptr;
>>> }
>> structs and pointers have also not been introduced yet.
> 
> I don't know what this have to do with the book. Should be D designed
> based on how good are you to explain the concepts on the book?  I think
> this is getting ridiculous... seriously. I don't want to be rude, I know
> you're putting a lot of work in the book and we all appreciate that, but
> you didn't mention any technical point about what I wrote.
> 
>>> I'm missing something? Why this shouldn't work?
>> It may work, but I was unable to pull it off reasonably well.
> 
> What problems did you find?

I thought I explained that above and in several other posts. I have the 
feeling this is going in circles, but let me add one more thing. People 
would want to have a reasonable way of choosing between T[new] and T[]. 
The differences between them are subtle (I have two tables showing the 
primitives of T[] and T[new], which are very similar). That static 
decision concerns future appends to the array, which doesn't strike me 
as something you know from the get-go through future iterations of a 
design. Use of "auto" messes up things further: a nice function may 
choose to return T[new] because it just created an array (an 
implementation detail), but clients may find that unexpected.


Andrei



More information about the Digitalmars-d mailing list