--- Comment #2 from 2011-02-17 05:00:47 PST ---
(In reply to comment #1)
> This does not need to be a language thing, library could suffice:

Of course, you may create template functions that do what I have shown (and

> BTW, your code does not work properly for array appending.  It does not
> initialize the hidden "allocated length" field, which would likely result in
> reallocation on append.

I see, thank you. That code I have written is clearly bug-prone, that's why a
built-in syntax (or functions in Phobos) are useful.

> Some other functions probably needed:
> a.extendUninit(size_t newlength);
> which is like a.length = newlength but does not initialize the new area.

This is a possible thing to add. But it looks less useful because when you want
uninitialized memory, you want max performance, so you probably don't want to
change the array length.

> I agree a syntax change would be more in line with current array allocation
> operations (which are currently all syntax based), but I don't really like 
> your
> proposed syntax.
> I would propose if we wanted to do a syntax change to do:
> auto a = new int[][](5, 5, 1);
> auto a = new int[][](5, 5, void);
> Where the optional final argument determines the initial value.
> This fits perfectly with the current array creation syntax:
> new T(dim1, dim2, ..., dimN)
> where T is a N dimensional array.  We can just add an extra parameter for the
> value.

I am strongly against this idea because it's too much bug-prone. It's too much
easy to add or remove a [] by mistake, or add or remove the initialization
value by mistake, so you may end with the wrong number of dimensions, etc.
auto a = new int[][](5, 5, 2);
auto a = new int[][][](5, 5, 2);
auto a = new int[][][](5, 5, 5, 2);

> One problem with this whole proposal is the issue with struct semantics.  That
> is, let's say a struct has a postblit, and you wanted to create an array of
> those structs with a default value.  Should the runtime call the postblit for
> each element?
> I'd say it should.

This exactly same problem is present in the initialization syntax for
fixed-sized arrays, so the best solution is to just copy that semantics:

struct Foo {
    int x;
    this(this) {
void main() {
    Foo[2] foos = Foo(1);
    assert(foos[0].x == 2);
    assert(foos[1].x == 2);

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to