2017-11-07 11:36 GMT+01:00 Thierry Goubier <thierry.goubier@gmail.com>:Regards,2017-11-07 11:24 GMT+01:00 Denis Kudriashov <dionisiydk@gmail.com>:2017-11-07 9:23 GMT+01:00 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com >:I have other ideas yet.I don't like the UndefinedSortFunction: too specific, compose oddly...The selector undefinedFirst is good, but the implementation not so.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(I use >> as example).��people select: #name >> #size >> #evenGenerally 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.��ThierryHi ThierryI ear those objections.Concerning the cost, i wonder what Clement thinks about it.Repeated perform: could benefit from PIC too, and adaptive inlining.
Concerning syntactic sugar (even if it's pure Smalltalk) I have same cicrconspectionIn the case of #name >> #size it's like we are creating another language for the basic mechanisms we already have (send messages)What we try to achieve here is in fact the reify the send, what is not really in the base Smalltalk.For a more functional style, we would rapidly need currying anyway so even more syntactic sugar...
On the other hand, PetitParser is nice too.
For SortFunction, I think we all agree that there's no debate, procedural style is so ugly������ people sorted: [:a :b |�������������� a name���������������������� ifNil:������������������������������ [ b name���������������������������� �� ���� ifNil: [a age > b age]���������������������������� �� ���� ifNotNil: [true "a first"]]���������������������� ifNotNil:������������������������������ [ b name���������������������������� �� ���� ifNil: [false "b first"]���������������������������� �� ���� ifNotNil: [a name = b name���������������������������������������������� ifTrue: [a age > b age]���������������������������������������������� ifFalse: [a name < b name]]]compared to:������ people sorted: #name ascending undifiedFirst , #age descendingor even������ people sorted: (#name collatedWith: #isNil) , #age descending
����������������������������������������