Suggestion: shortcut for 'new X' #2

Ivan Senji ivan.senji_REMOVE_ at _THIS__gmail.com
Tue Sep 5 17:20:01 PDT 2006


Derek Parnell wrote:
> On Tue, 05 Sep 2006 20:35:13 +0200, Ivan Senji wrote:
> 
>> Kristian wrote:
>>> Ok, I think my previous suggestion for an optional shortcut was a bit 
>>> too strange... For example:
>>>
>>> Foo f = new Foo;
>>> Bar b = new Bar(10);
>>>
>>> <->
>>>
>>> Foo f = new;
>>> Bar b = new(10);
>>>
>>> Now there has been a proposal of the following (I use 'local' keyword 
>>> here):
>>>
>>> Foo f1 = local Foo;  //stack/RAII
>>> Foo f2 = new Foo;    //heap
>>>
>>> I like the syntax also.
>>>
>>> How about if you could *alternately* write:
>>>
>>> local Foo f1;
>>> new Foo f2;
>>>
>>> This would take care of the redundant class name in the declarations.
>>>
>>> (I just hate redundance! ;) Writing class names twice is frustrating; 
>>> there is a pattern of "X ... X".)
>>>
>>> Constructor parameters are put after variable names:
>>>
>>> local Bar b(10);
>>> new Bar b(10, true);
>>>
>>> If this (or something similar) is not possible, a lot of people 
>>> (including me) could end writing auto typed declarations. For example 
>>> (auto here means auto type, not RAII):
>>>
>>> auto f = new Foo;
>>> auto b = new Bar(10);
>> And I still don't see what is so terribly awful about that?
>>
>>> That could be shortened to:
>>>
>>> f = new Foo;
>>> b = new Bar(10);
>>>
>>> Which leads to my suggestion:
>>>
>>> new Foo f;
>>> new Bar b(10);
>> Hmm, that looks a little to strange to me. It looks more like an 
>> expression than a declaration.
> 
> The suggestion looks good to me. I see the same form ...
> 
>  static int a;
>  new    Foo b;
> 
> so to generalize ...
> 
> DATADECLARATION ::   [STORAGECLASS] TYPE IDENTIFIER [ARGUMENTS]
> 
> 
>          int   a;
>   new    Foo   b;
>   local  Bar   c;
>   static float e;
>   

OK, now I know why it looked strange.. :)

Class references when normally created would be null, and you have to 
assign something to them for them to be something other than null.

And with this syntax there is explicit assignment :)

But is a bigger problem maybe that there are going to be too many ways 
to write the same thing?

Foo b = new Foo;
auto b = new Foo;
new Foo b;






More information about the Digitalmars-d mailing list