May 25, 2012 clear() and UFCS | ||||
---|---|---|---|---|
| ||||
So I was writing a container class and in some test code, I called container.clear(). Reasonable enough, right? Hell, it even compiled!
Turns out, my program completely broke at runtime. Apparently, I'd forgotten to implement clear() on my container class, and *object.clear() was being called instead*.
I don't blame UFCS for this. It just happened to be the reason this compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST HORRIBLE NAME EVER* for a function that actually finalizes and zeroes an object. Did it not seem obvious to call it, I don't know, *finalize*? And even ignoring the naming, having a symbol called clear in the 'global' namespace is absolute insanity.
Am I the only person with this opinion?
--
Alex Rønne Petersen
alex@lycus.org
http://lycus.org
|
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Rønne Petersen | On 25.05.2012 17:04, Alex Rønne Petersen wrote: > So I was writing a container class and in some test code, I called > container.clear(). Reasonable enough, right? Hell, it even compiled! > > Turns out, my program completely broke at runtime. Apparently, I'd > forgotten to implement clear() on my container class, and > *object.clear() was being called instead*. > > I don't blame UFCS for this. It just happened to be the reason this > compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST > HORRIBLE NAME EVER* for a function that actually finalizes and zeroes an > object. Did it not seem obvious to call it, I don't know, *finalize*? > And even ignoring the naming, having a symbol called clear in the > 'global' namespace is absolute insanity. > > Am I the only person with this opinion? > No, there are thousands like you. Let's call clear "nuke", breaking TDPL and saving the day. :) P.S. Obviously first clear goes through normal deprecation cycle. -- Dmitry Olshansky |
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Rønne Petersen | Le 25/05/2012 15:04, Alex Rønne Petersen a écrit :
> So I was writing a container class and in some test code, I called
> container.clear(). Reasonable enough, right? Hell, it even compiled!
>
> Turns out, my program completely broke at runtime. Apparently, I'd
> forgotten to implement clear() on my container class, and
> *object.clear() was being called instead*.
>
> I don't blame UFCS for this. It just happened to be the reason this
> compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST
> HORRIBLE NAME EVER* for a function that actually finalizes and zeroes an
> object. Did it not seem obvious to call it, I don't know, *finalize*?
> And even ignoring the naming, having a symbol called clear in the
> 'global' namespace is absolute insanity.
>
> Am I the only person with this opinion?
>
Why is UFCS involved here ?
|
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to deadalnix | On 25-05-2012 15:17, deadalnix wrote: > Le 25/05/2012 15:04, Alex Rønne Petersen a écrit : >> So I was writing a container class and in some test code, I called >> container.clear(). Reasonable enough, right? Hell, it even compiled! >> >> Turns out, my program completely broke at runtime. Apparently, I'd >> forgotten to implement clear() on my container class, and >> *object.clear() was being called instead*. >> >> I don't blame UFCS for this. It just happened to be the reason this >> compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST >> HORRIBLE NAME EVER* for a function that actually finalizes and zeroes an >> object. Did it not seem obvious to call it, I don't know, *finalize*? >> And even ignoring the naming, having a symbol called clear in the >> 'global' namespace is absolute insanity. >> >> Am I the only person with this opinion? >> > > Why is UFCS involved here ? Since the clear method didn't exist on the type, the call was mapped to the clear function in the global scope. This is UFCS. -- Alex Rønne Petersen alex@lycus.org http://lycus.org |
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Rønne Petersen | Le 25/05/2012 15:21, Alex Rønne Petersen a écrit :
> On 25-05-2012 15:17, deadalnix wrote:
>> Le 25/05/2012 15:04, Alex Rønne Petersen a écrit :
>>> So I was writing a container class and in some test code, I called
>>> container.clear(). Reasonable enough, right? Hell, it even compiled!
>>>
>>> Turns out, my program completely broke at runtime. Apparently, I'd
>>> forgotten to implement clear() on my container class, and
>>> *object.clear() was being called instead*.
>>>
>>> I don't blame UFCS for this. It just happened to be the reason this
>>> compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST
>>> HORRIBLE NAME EVER* for a function that actually finalizes and zeroes an
>>> object. Did it not seem obvious to call it, I don't know, *finalize*?
>>> And even ignoring the naming, having a symbol called clear in the
>>> 'global' namespace is absolute insanity.
>>>
>>> Am I the only person with this opinion?
>>>
>>
>> Why is UFCS involved here ?
>
> Since the clear method didn't exist on the type, the call was mapped to
> the clear function in the global scope. This is UFCS.
>
OK, I get it ! Weird side effect :D
BTW, where is the documentation about clear and emplace ? I can't find it on dlang.org .
|
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to deadalnix | On 25-05-2012 16:50, deadalnix wrote: > Le 25/05/2012 15:21, Alex Rønne Petersen a écrit : >> On 25-05-2012 15:17, deadalnix wrote: >>> Le 25/05/2012 15:04, Alex Rønne Petersen a écrit : >>>> So I was writing a container class and in some test code, I called >>>> container.clear(). Reasonable enough, right? Hell, it even compiled! >>>> >>>> Turns out, my program completely broke at runtime. Apparently, I'd >>>> forgotten to implement clear() on my container class, and >>>> *object.clear() was being called instead*. >>>> >>>> I don't blame UFCS for this. It just happened to be the reason this >>>> compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST >>>> HORRIBLE NAME EVER* for a function that actually finalizes and >>>> zeroes an >>>> object. Did it not seem obvious to call it, I don't know, *finalize*? >>>> And even ignoring the naming, having a symbol called clear in the >>>> 'global' namespace is absolute insanity. >>>> >>>> Am I the only person with this opinion? >>>> >>> >>> Why is UFCS involved here ? >> >> Since the clear method didn't exist on the type, the call was mapped to >> the clear function in the global scope. This is UFCS. >> > > OK, I get it ! Weird side effect :D > > BTW, where is the documentation about clear and emplace ? I can't find > it on dlang.org . I think clear() is basically entirely undocumented still. -- Alex Rønne Petersen alex@lycus.org http://lycus.org |
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Rønne Petersen | On Fri, 25 May 2012 10:52:15 -0400, Alex Rønne Petersen <alex@lycus.org> wrote:
> On 25-05-2012 16:50, deadalnix wrote:
>> Le 25/05/2012 15:21, Alex Rønne Petersen a écrit :
>>> On 25-05-2012 15:17, deadalnix wrote:
>>>> Le 25/05/2012 15:04, Alex Rønne Petersen a écrit :
>>>>> So I was writing a container class and in some test code, I called
>>>>> container.clear(). Reasonable enough, right? Hell, it even compiled!
>>>>>
>>>>> Turns out, my program completely broke at runtime. Apparently, I'd
>>>>> forgotten to implement clear() on my container class, and
>>>>> *object.clear() was being called instead*.
>>>>>
>>>>> I don't blame UFCS for this. It just happened to be the reason this
>>>>> compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST
>>>>> HORRIBLE NAME EVER* for a function that actually finalizes and
>>>>> zeroes an
>>>>> object. Did it not seem obvious to call it, I don't know, *finalize*?
>>>>> And even ignoring the naming, having a symbol called clear in the
>>>>> 'global' namespace is absolute insanity.
>>>>>
>>>>> Am I the only person with this opinion?
>>>>>
>>>>
>>>> Why is UFCS involved here ?
>>>
>>> Since the clear method didn't exist on the type, the call was mapped to
>>> the clear function in the global scope. This is UFCS.
>>>
>>
>> OK, I get it ! Weird side effect :D
>>
>> BTW, where is the documentation about clear and emplace ? I can't find
>> it on dlang.org .
>
> I think clear() is basically entirely undocumented still.
Wow, you're right, it's not documented. That should be fixed!
-Steve
|
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dmitry Olshansky | On 5/25/12 8:06 AM, Dmitry Olshansky wrote:
> On 25.05.2012 17:04, Alex Rønne Petersen wrote:
>> So I was writing a container class and in some test code, I called
>> container.clear(). Reasonable enough, right? Hell, it even compiled!
>>
>> Turns out, my program completely broke at runtime. Apparently, I'd
>> forgotten to implement clear() on my container class, and
>> *object.clear() was being called instead*.
>>
>> I don't blame UFCS for this. It just happened to be the reason this
>> compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST
>> HORRIBLE NAME EVER* for a function that actually finalizes and zeroes an
>> object. Did it not seem obvious to call it, I don't know, *finalize*?
>> And even ignoring the naming, having a symbol called clear in the
>> 'global' namespace is absolute insanity.
>>
>> Am I the only person with this opinion?
>>
>
> No, there are thousands like you. Let's call clear "nuke", breaking TDPL
> and saving the day. :)
>
> P.S. Obviously first clear goes through normal deprecation cycle.
Since this is a recurring issue we should probably change the name.
Andrei
|
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On 25-05-2012 16:56, Steven Schveighoffer wrote: > On Fri, 25 May 2012 10:52:15 -0400, Alex Rønne Petersen > <alex@lycus..org> wrote: > >> On 25-05-2012 16:50, deadalnix wrote: >>> Le 25/05/2012 15:21, Alex Rønne Petersen a écrit : >>>> On 25-05-2012 15:17, deadalnix wrote: >>>>> Le 25/05/2012 15:04, Alex Rønne Petersen a écrit : >>>>>> So I was writing a container class and in some test code, I called >>>>>> container.clear(). Reasonable enough, right? Hell, it even compiled! >>>>>> >>>>>> Turns out, my program completely broke at runtime. Apparently, I'd >>>>>> forgotten to implement clear() on my container class, and >>>>>> *object.clear() was being called instead*. >>>>>> >>>>>> I don't blame UFCS for this. It just happened to be the reason this >>>>>> compiled at all. But, what I do think is: clear is the *ABSOLUTELY >>>>>> MOST >>>>>> HORRIBLE NAME EVER* for a function that actually finalizes and >>>>>> zeroes an >>>>>> object. Did it not seem obvious to call it, I don't know, *finalize*? >>>>>> And even ignoring the naming, having a symbol called clear in the >>>>>> 'global' namespace is absolute insanity. >>>>>> >>>>>> Am I the only person with this opinion? >>>>>> >>>>> >>>>> Why is UFCS involved here ? >>>> >>>> Since the clear method didn't exist on the type, the call was mapped to >>>> the clear function in the global scope. This is UFCS. >>>> >>> >>> OK, I get it ! Weird side effect :D >>> >>> BTW, where is the documentation about clear and emplace ? I can't find >>> it on dlang.org . >> >> I think clear() is basically entirely undocumented still. > > Wow, you're right, it's not documented. That should be fixed! > > -Steve We actually have tons of documentation that still encourages using delete... -- Alex Rønne Petersen alex@lycus.org http://lycus.org |
May 25, 2012 Re: clear() and UFCS | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On 25-05-2012 16:56, Steven Schveighoffer wrote: > On Fri, 25 May 2012 10:52:15 -0400, Alex Rønne Petersen > <alex@lycus..org> wrote: > >> On 25-05-2012 16:50, deadalnix wrote: >>> Le 25/05/2012 15:21, Alex Rønne Petersen a écrit : >>>> On 25-05-2012 15:17, deadalnix wrote: >>>>> Le 25/05/2012 15:04, Alex Rønne Petersen a écrit : >>>>>> So I was writing a container class and in some test code, I called >>>>>> container.clear(). Reasonable enough, right? Hell, it even compiled! >>>>>> >>>>>> Turns out, my program completely broke at runtime. Apparently, I'd >>>>>> forgotten to implement clear() on my container class, and >>>>>> *object.clear() was being called instead*. >>>>>> >>>>>> I don't blame UFCS for this. It just happened to be the reason this >>>>>> compiled at all. But, what I do think is: clear is the *ABSOLUTELY >>>>>> MOST >>>>>> HORRIBLE NAME EVER* for a function that actually finalizes and >>>>>> zeroes an >>>>>> object. Did it not seem obvious to call it, I don't know, *finalize*? >>>>>> And even ignoring the naming, having a symbol called clear in the >>>>>> 'global' namespace is absolute insanity. >>>>>> >>>>>> Am I the only person with this opinion? >>>>>> >>>>> >>>>> Why is UFCS involved here ? >>>> >>>> Since the clear method didn't exist on the type, the call was mapped to >>>> the clear function in the global scope. This is UFCS. >>>> >>> >>> OK, I get it ! Weird side effect :D >>> >>> BTW, where is the documentation about clear and emplace ? I can't find >>> it on dlang.org . >> >> I think clear() is basically entirely undocumented still. > > Wow, you're right, it's not documented. That should be fixed! > > -Steve Before we do, we should deprecate clear and rename it to finalize, though. -- Alex Rønne Petersen alex@lycus.org http://lycus.org |
Copyright © 1999-2021 by the D Language Foundation