[squeak-dev] Utilities' symbol mangling methods

Frank Shearar frank.shearar at gmail.com
Mon Dec 2 22:11:37 UTC 2013


On 2 December 2013 20:52, Chris Muller <asqueaker at gmail.com> wrote:
> I agree wtih Bert, this is generally useful.  I have demand now.  Maui
> rolls this function for itself but would prefer to have it in the
> image.
>
> It should be on Symbol, not String, because we're talking about method
> selectors, which are always Symbols.

I had debated putting the methods on Symbol, but I had (and still
have) no idea whether or not they would always be Symbols, and not
user input.

I would not oppose moving them to Symbol, and adjusting the tests.

> The proposal to put it in a "utility" class reminds me of an old Java
> gig, where we couldn't extend classes with additional methods.  Proper
> delegation of a needed behavior is not "monkey patching", which
> carries a derogatory connotation.

Yes, which is half of why I use the term :)

More seriously, in Ruby it's considered a bad smell, but in Ruby you
don't interact with a running system. So in Ruby, it's really hard to
find out which packages overwrote each other's patches, whereas the
problem is much easier to debug and to fix in Smalltalk.

It is still a problem in Smalltalk, which is why we have such an
aversion to Monticello overrides. Environments could offer the chance
to _with an Environment_ add methods to classes. But to do that
properly you'd need to change method lookup. I _think_ that means you
end up with Newspeak's "comb" method lookup? Eliot could say for sure.

frank

> On Mon, Dec 2, 2013 at 4:22 AM, Frank Shearar <frank.shearar at gmail.com> wrote:
>> On 2 December 2013 10:16, Bert Freudenberg <bert at freudenbergs.de> wrote:
>>>
>>> On 2013-11-30, at 01:00, Frank Shearar <frank.shearar at gmail.com> wrote:
>>>
>>>> On 29 November 2013 23:50, tim Rowledge <tim at rowledge.org> wrote:
>>>>>
>>>>> On 29-11-2013, at 3:38 PM, Frank Shearar <frank.shearar at gmail.com> wrote:
>>>>>
>>>>>> On 29 November 2013 21:51, tim Rowledge <tim at rowledge.org> wrote:
>>>>>>>
>>>>>>> On 29-11-2013, at 12:43 PM, Frank Shearar <frank.shearar at gmail.com> wrote:
>>>>>>>
>>>>>>>> inherentSelectorForGetter
>>>>>>> That’s absolutely a Symbol method and really ought always have been there.
>>>>>>
>>>>>> It wasn't clear to me either from the senders-of or the implementation
>>>>>> whether it should go on Symbol or String, so I went with the
>>>>>> broader/safer option, and put it on String.
>>>>>>
>>>>>> But I take it you're voting for "put it on the dang object" option
>>>>>> rather than "monkey patching is evil”?
>>>>>
>>>>> Guess so; methods ought to go in The Right Place. Now *defining* that place… that’s where the art is.
>>>>
>>>> And so a method that takes a string/symbol and turns it into some
>>>> slightly different symbol pretty much ought to go on String/Symbol.
>>>>
>>>> I'm leaning heavily towards the monkey patch option, and not just
>>>> because I have the work done waiting for committing. I'll hold off on
>>>> anything for the moment though, both because it has a rather large
>>>> number of changes to Etoys and to give others a chance to chime in.
>>>> That it's midnight here, and I'm tired and hence not in the best shape
>>>> to do dangerous things like commit changes has nothing at all to do
>>>> with the waiting. Promise.
>>>>
>>>> frank
>>>
>>> Converting between setters and getters seems generally useful to me, so even if at the moment it may be only used in Etoys, I'd not make it an Etoys-specific extension.
>>
>> Since we ship Etoys in a standard Squeak image, how about we keep
>> these methods in Etoys until we do start mangling selectors elsewhere?
>> In other words, pull the methods out on demand? (I have no objections
>> to them moving out of Etoys if they do prove to be generally useful.)
>>
>> frank
>>
>>> - Bert -
>>>
>>>
>>>
>>
>


More information about the Squeak-dev mailing list