[Pharo-dev] about SortFunctions

Denis Kudriashov dionisiydk at gmail.com
Tue Nov 7 05:55:05 EST 2017

2017-11-07 11:36 GMT+01:00 Thierry Goubier <thierry.goubier at gmail.com>:

> 2017-11-07 11:24 GMT+01:00 Denis Kudriashov <dionisiydk at gmail.com>:
>> 2017-11-07 9:23 GMT+01:00 Nicolas Cellier <nicolas.cellier.aka.nice at gmai
>> l.com>:
>>> I have other ideas yet.
>>> The selector undefinedFirst is good, but the implementation not so.
>>> I don't like the UndefinedSortFunction: too specific, compose oddly...
>>> In the PR, collatedBy: is the way to tell how we sort properties (if you
>>> have a better name, go, it's bikesheding day)
>>>     "sort by size of name"
>>>     (people sorted: (#name collatedBy: #size))
>>>         =  (people sorted: [:p| p name size])
>> It is nice idea but it should be not bound to sort functions. Because
>> this feature is useful for other block based messages:
>> people collect: #name >> #size
>> people select: #name >> #size >> #even
>> (I use >> as example).
>> Generally it is about functional programming. Would be nice to have this
>> in image because it will simplify scripting a lot.
>> I remember nice set of blog posts from Vassili Bykov about such kind of
>> things http://blog.3plus4.org/2007/03/.
> This code has a cost, however.
> First, it's rather slow (hidden #perform: in there).
> Second, I had a first hand experience that it is making it significantly
> more complex to understand for newcomers (implying that it creates
> additional, special semantics compared to basic smalltalk). I know that
> there is no special semantic involved, but it looks as if to practitionners
> of other programming languages and their complex semantics.
> I do like the SortFunctions idea (and its extension), but it's important
> IMHO to not make it too cryptic.

That's why I said it is not related to SortFunction.
Generally we rarely use symbol for #collect:/#select: in production. But it
is supper handy for scripting/debugging/inspecting. I use it all the time.
Also performance in that case can be covered by Sista.
Another problem: it complicates debugging because it is not easy to step
into selector in that case. With block we just press "Through" button and
we are done. But I am sure we can improve it too. Our debugger is in our

Another advantage of symbol based functions: there is not potential memory
leak here. In case of block we always have reference to outer context. So
it is dangerous to use blocks in caches for example.

> Regards,
> Thierry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20171107/c3fb53e1/attachment-0002.html>

More information about the Pharo-dev mailing list