Eliminate "new" for class object creation?

Yigal Chripun yigal100 at gmail.com
Tue Oct 20 04:51:20 PDT 2009


Chris Nicholson-Sauls Wrote:

> Andrei Alexandrescu wrote:
> > I'm having a hard time justifying that you use
> > 
> > new X(args)
> > 
> > to create a class object, and
> > 
> > X(args)
> > 
> > to create a struct object. I wrote this:
> > 
> > ============
> > The syntactic  difference between  the expression creating  a @struct@
> > object---Test(@\meta{args}@)@---and the  expression creating a @class@
> > object---\cc{new Test(}\meta{args}@)@---may be  jarring at first. \dee
> > could have dropped the @new@  keyword entirely, but that @new@ reminds
> > the programmer that an object allocation (i.e., nontrivial work) takes
> > place.
> > ===============
> > 
> > I'm unhappy about that explanation because the distinction is indeed 
> > very weak. The constructor of a struct could also do unbounded amounts 
> > of work, so what gives?
> > 
> > I hereby suggest we get rid of new for class object creation. What do 
> > you guys think?
> > 
> > 
> > Andrei
> 
> What would become the equivalent of, for example:
> 	new uint[][][](4, 3, 8)
> 
> I can live with having to define API's for custom allocation strategies of classes and 
> structures, rather than being able to hijack a language expression (the way one can with 
> 'new'/'delete'), but what about the non-class new'ables?
> 
> However, if we really must toss the 'new' keyword out the window, I reiterate my support 
> for a 'T new(T,A...)(A a)' in the runtime.
> 
> -- Chris Nicholson-Sauls

slightly ugly but: 
auto arr = (Array!Array!Array!int).new(4, 3, 8);
  //OR 
auto arr = MArray!(int)(4, 3, 8);






More information about the Digitalmars-d mailing list