[squeak-dev] The Trunk: Collections-eem.792.mcz

Levente Uzonyi leves at caesar.elte.hu
Fri May 4 19:43:57 UTC 2018


On Thu, 3 May 2018, Chris Muller wrote:

>                   On a serious note, libary methods, like that method, ought to be fast,
> 
>
>             Every method in the image is a library method, so what do you mean by
> 
>
>       Really? Explain me how Browser >> #defaultBrowserTitle, a method I chose randomly, is a library method?
> 
> 
> Well, I was actually asking for clarification from _you_  for the meaning of "library method", since you were the one assigning an "ought" to them  :).  So I started out with it meaning, "every method in the base image", as a means to open up the question of what you
> meant.  My own criteria is "methods which are called thousands of times per minute" _today_.  But as the guy whose done more of these sorts of method optimizations than anyone (most of which I love), I am actually *truly curious* about YOUR criteria on this.  What
> methods in the image would Levente prefer to be more readable than performant, and why?

I can't give you an exact definition of a "library method", but I'm sure 
that String >> #isAsciiString is one, while Browser >> 
#defaultBrowserTitle is not.
A rule of thumb could be that if a core method (e.g. anything in 
Kernel/Collections) is part of an API and it's not there to support a very 
specific task (e.g. Dictionary >> #associationDeclareAt:), then its 
performance should be taken into account.

Btw, please have a look at String >> #isOctetString.

Levente

> 
> 
> 
> > ....
>  
> 
>
>                   because you can't know in what situation they will be used. Saying that it's
>                   not even used is therefore not a valid reason.
> 
>
>             That's only true for the very lowest-level methods.  Generally, it's
>             better to design and code for what's known, and NOT try to code for
>             the future / unknown.  IF and when that future comes, it'd be easy
>             enough for you to deal with any performance issues at THAT time.  In
>             the meantime, we "ought"  :) to keep as much beautiful minimal
>             elegance as we can.
> 
>
>       So, if I decided to write a mail transfer agent, and I found that optimizing #isAsciiString would bump the throughput by, let's say, 10%, then and only then would I be allowed to change the implementation in Squeak? Or should I keep my optimized version in
>       my image, because it's not considered generally useful?
> 
> 
> Yes.  That's when you'll have the concrete context necessary to enable you to make the best implementation choice.  Until then, degrading code readability in exchange for no real-world performance benefit just... well, degrades the code...


More information about the Squeak-dev mailing list