From: shevegen@... Date: 2019-11-07T16:00:16+00:00 Subject: [ruby-core:95744] [Ruby master Feature#1089] Stable sorting for sort and sort_by Issue #1089 has been updated by shevegen (Robert A. Heiler). sawa wrote: > Do you really mean it's sad? Or do you mean it's said? I think he meant "sad", rather than "said", possibly due to the desire (by a ruby user) to see that ruby behaves in the same way across different operating systems - at the least this is what I think rogerdpack meant. :) I myself have no particular pro/con opinion on the issue; it may be better to create a new one, in the event that people feel strongly about it (11 years ago is quite a long time). I can, however had, understand that ruby users would like to see ruby behaves in the same way whenever they use it. In that sense, ruby abstracts away complexities and oddities of different platforms - that is convenient for a user. I think matz and the core team also have that goal, in the sense that I remember suggestions that were rejected in the past if it would have led to different behaviour on different operating systems (or disparate features, e. g. things that would only work on linux+ruby, but not on windows+ruby or mac+ruby). To sorting in general: some time ago the insert-order remained the same for hashes, so that "first-in" or "last-in" could be distinguished for free. I liked that addition. Whenever I use .each_pair on a hash, I know that the more recent additions will, by default, appear at the "end" of the output, if we use e. g. .each_pair combined with puts/print output. I think that was a good change - we sort of gain additional information for free, which can be helpful sometimes. So I think that was convenient. On the particular issue here, I have no particular opinion, but I also think that both murphy and rogerdpack made good points. Even then I think it is better to make a new proposal, as naruse suggested back then (sorry for commenting on that old issue as well). Matz objection was very much in regards to speed/slow-downs, so I think new proposals should consider any speed trade-off as well, if it may affect other ruby users and their code. ---------------------------------------- Feature #1089: Stable sorting for sort and sort_by https://bugs.ruby-lang.org/issues/1089#change-82562 * Author: murphy (Kornelius Kalnbach) * Status: Rejected * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: ---------------------------------------- =begin I'd like to have stable sorting in Ruby. Stable sorting means that if two items are ==, they will retain their order in the list after sorting. In other words, stable sort does never switch two equal items. In Ruby 1.9.1, you'd have to use something like enum.sort_by.with_index { |a, i| [a, i] } to achieve a stable sort in Ruby. It would also be nice to minimize the number of comparisons, since method calling is expensive in Ruby. Python is using a highly optimized implementation of a variant of merge sort, which is stable and uses very few comparisons (called Timsort after Tim Peters); maybe Ruby can adopt it for sort and sort_by: http://svn.python.org/projects/python/trunk/Objects/listsort.txt Introducing stable sorting would not be a problem for old code because the order of equal items after sorting is currently not specified. =end -- https://bugs.ruby-lang.org/ Unsubscribe: