Eliminate "new" for class object creation?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Oct 20 06:42:35 PDT 2009


Leandro Lucarella wrote:
> Andrei Alexandrescu, el 19 de octubre a las 22:16 me escribiste:
>> dsimcha wrote:
>>> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>>>> Leandro Lucarella wrote:
>>>>> Jason House, el 19 de octubre a las 22:20 me escribiste:
>>>>>> Bill Baxter Wrote:
>>>>>>
>>>>>>> On Mon, Oct 19, 2009 at 4:00 PM, Rainer Deyke <rainerd at eldwood.com> wrote:
>>>>>>>> Andrei Alexandrescu wrote:
>>>>>>>>> I hereby suggest we get rid of new for class object creation. What do
>>>>>>>>> you guys think?
>>>>>>>> *applause*
>>>>>>>>
>>>>>>>> 'X(x)' and 'new X(x)' have distinct meanings in C++. ?In Java/C#/D, the
>>>>>>>> 'new' is just line noise.
>>>>>>> Well, I think "new Foo" is how you create a struct on the heap in D.
>>>>>>> So it's not exactly line noise.
>>>>>>> I don't mind getting rid of new, but there better be a good way to
>>>>>>> allocate structs on the heap.  And it better not require me to do an
>>>>>>> import just to be able to call the allocation function.
>>>>>>>
>>>>>>> I like the Foo.new syntax myself.
>>>>>>>
>>>>>>> --bb
>>>>>> Actually, new can also be used for creating classes on the stack...
>>>>>> scope T t = new T();
>>>>> Damn! This is getting confusing. It seems like allocation should be
>>>>> revised altogether :)
>>>> Scope will go (and this time I'm not kidding). It's very unsafe.
>>>> Andrei
>>> But we need a reasonable way of allocating class instances on the stack as an
>>> optimization.  Scope provides a nice way to do that.  In general, I'm sick of
>>> hearing about safety.  D is a close-to-the-metal systems language.  The programmer
>>> has to be given control.  In general I think we're going waaaay off the deep edge
>>> trying to make D too safe lately at the expense of convenience and performance.
>> No problem. You will be able to use InSitu!T. It is much better to
>> confine unsafe features to libraries instead of putting them in the
>> language.
>>
>> {
>>     auto foo = InSitu!(Foo)(args);
>>     // use foo
>>     ...
>>     // foo goes away
>> }
> 
> <useless discussion>
> 
> Why not Scoped!T ? I think the purpose for this that the lifetime of the
> object is bounded to the scope, right? I think is hard to figure that out
> from InSitu!T than Scoped!T.
> 
> </useless discussion>

It's not a useless discussions, names are important. Scoped is more 
evocative for in-function definition, whereas InPlace/InSitu are (at 
least to me) more evocative when inside a class.

class A {
    InPlace!B member;
}


Andrei



More information about the Digitalmars-d mailing list