Thread overview
Forbid the use of method name "init"
May 10, 2008
Frank Benoit
May 11, 2008
davidl
May 27, 2008
Bruno Medeiros
May 10, 2008
"init" and other class properties are kind of shadow-keywords.

class MyClass{
  void init(){
  }
}

The class is fine and can be used.
Now someone attempts to insert this class into a container....

template Templ(T){
  T t = T.init; // Compile error
}

The compiler should forbid the use of the method name "init", if the signature does not make any sense for an "init" property. It must be a static method, with a return value and no arguments.

May 10, 2008
"Frank Benoit" <keinfarbton@googlemail.com> wrote in message news:g052dt$qt4$1@digitalmars.com...
> "init" and other class properties are kind of shadow-keywords.
>
> class MyClass{
>   void init(){
>   }
> }
>
> The class is fine and can be used.
> Now someone attempts to insert this class into a container....
>
> template Templ(T){
>   T t = T.init; // Compile error
> }
>
> The compiler should forbid the use of the method name "init", if the signature does not make any sense for an "init" property. It must be a static method, with a return value and no arguments.

This should extend to any semi-reserved name.  The compiler used to allow redefinition of 'sizeof' and 'offsetof' but checks were added to disallow that.  That mechanism should just be extended.


May 11, 2008
在 Sun, 11 May 2008 05:46:57 +0800,Jarrett Billingsley <kb3ctd2@yahoo.com> 写道:

> "Frank Benoit" <keinfarbton@googlemail.com> wrote in message
> news:g052dt$qt4$1@digitalmars.com...
>> "init" and other class properties are kind of shadow-keywords.
>>
>> class MyClass{
>>   void init(){
>>   }
>> }
>>
>> The class is fine and can be used.
>> Now someone attempts to insert this class into a container....
>>
>> template Templ(T){
>>   T t = T.init; // Compile error
>> }
>>
>> The compiler should forbid the use of the method name "init", if the
>> signature does not make any sense for an "init" property. It must be a
>> static method, with a return value and no arguments.
>
> This should extend to any semi-reserved name.  The compiler used to allow
> redefinition of 'sizeof' and 'offsetof' but checks were added to disallow
> that.  That mechanism should just be extended.
>
>

I filed a bug of forbiding the use of stringof method. But it's markd as invalid :(
http://d.puremagic.com/issues/show_bug.cgi?id=1412

-- 
使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/
May 27, 2008
davidl@126.com wrote:
> ÔÚ Sun, 11 May 2008 05:46:57 +0800£¬Jarrett Billingsley <kb3ctd2@yahoo.com> дµÀ:
> 
>> "Frank Benoit" <keinfarbton@googlemail.com> wrote in message
>> news:g052dt$qt4$1@digitalmars.com...
>>> "init" and other class properties are kind of shadow-keywords.
>>>
>>> class MyClass{
>>>   void init(){
>>>   }
>>> }
>>>
>>> The class is fine and can be used.
>>> Now someone attempts to insert this class into a container....
>>>
>>> template Templ(T){
>>>   T t = T.init; // Compile error
>>> }
>>>
>>> The compiler should forbid the use of the method name "init", if the
>>> signature does not make any sense for an "init" property. It must be a
>>> static method, with a return value and no arguments.
>>
>> This should extend to any semi-reserved name.  The compiler used to allow
>> redefinition of 'sizeof' and 'offsetof' but checks were added to disallow
>> that.  That mechanism should just be extended.
>>
>>
> 
> I filed a bug of forbiding the use of stringof method. But it's markd as invalid :(
> http://d.puremagic.com/issues/show_bug.cgi?id=1412
> 

I've added my reasoning to that bug report. I guess one could make a case for redefining 'init', but as for 'stringof', it should be the same as 'sizeof' and 'offsetof': unextendable, like Jarret mentioned.

-- 
Bruno Medeiros - Software Developer, MSc. in CS/E graduate
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D