In fact, Rust separates initialization from allocation. The OP was correct that new might better be called an initializer, but I think that ship has sailed---constructor is the generally accepted term for the function which initiailizes the instance, for better or worse. Still, for a class C, it is possible to write C(...), @C(...), ~C(...) and so forth, each of which will allocate memory from a different location (stack, task heap, exchange heap).

With regions, it will also be possible to use user-specified memory pools. The current syntax is `new(pool) C`, harkening back to overloaded-new in C++, but I am not sure if we'll stay with it.

What I mainly dislike about the current constructor system is having to repeat everything all the time. Sometimes this is ok but usually a constructor just wants to initialize all (or most) of the fields from the values given in the parameters. One possibility that patrick and I had talked about is that if there is no constructor defined, one can construct the class using a literal syntax like `C { f1: ..., f2: ... }`. But I am concerned that this is kind of discontinuous with the constructor---implementing a constructor would then require rewriting every allocation site.

So perhaps we should just say there is a default constructor of the form:

    new(f1: T1, ..., fN: T2) {
        self.f1 = f1;
        ...
        self.fN = fN;
    }

for each field `f1`, ..., `fN` defined in the class (and in the same order as they are defined).


Niko

On 4/12/12 12:25 AM, Kobi Lurie wrote:
what about a private new() in the class, that returns the allocated instance, and a public 'make' fn, with how many overloads you want, to serve as a ctor. rustc can require that atleast one 'make' fn will exist for a class, and that it returns the same object that came from new(). (the user cannot write a fn named 'make', if it doesn't return the class type, and the actual object from new(). -- if it's possible to verify such a thing statically)

bye, kobi



On 4/12/2012 7:56 AM, Steven Blenkinsop wrote:
I don't know about your use of the term "constructor", but it is true
that "new" is often associated with the allocation side of things
instead of the initialization side of things in languages that make a
distinction (many don't). Go faces the opposite problem since people
think of "new" as syntax for calling a constructor which does
initialization, and its "new" does allocation. But maybe that just helps
prove your point, which is that people have strong preconceptions about
what "new" means, so it might be worthwhile for Rust to pick a different
word, all else being equal. I can't see it creating huge problems, since
the worst case scenario is that people will continuously be griping
about how "new" is the wrong word, but if you can minimize the number of
perennial meaningless complaints, you have more time to address real
problems.


_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to