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.