On Tuesday, 9 April 2013 at 15:56:10 UTC, Andrei Alexandrescu wrote:
On 4/9/13 11:43 AM, deadalnix wrote:
On Tuesday, 9 April 2013 at 15:29:42 UTC, Andrei Alexandrescu wrote:
They are different than regular functions by necessity. A constructor must start on an raw object ("unprepared" in a sense) and bring it to a meaningful state. In the case of immutable and const objects, that grants the constructor special characteristics that are very unlike
regular functions. So they are special.


They need magic inside, it doesn't need to leak outside.

Agreed.

As now they are rvalues, this is easy to type the constructor as follow :

struct S {
T t;

this(T t) {
this.t = t;
}

// Becomes.
static S __ctor(T t) {
S this = S.init; // Magic !!
this.t = t;
return this; // Magic !!
}
}

The magic don't need to leak outside.

I'm lost.

Andrei

What I'm saying is that no magic need to be done outside the constructor, and it can be considered as a regular function.

For instance, in the code snippet above, the constructor can be translated into the __ctor function (in D like) by adding the magic.

This would allow to merge constructors and functions, and handle both the same way.

Reply via email to