Looking at the discussion on https://code.google.com/p/v8/issues/detail?id=90 it seems the V8 team is waiting for TC39 to tell them that they have to switch to a stable algorithm.
An agenda item for the next meeting? Norbert On Jun 13, 2013, at 14:40 , Brendan Eich wrote: > Just confirming: In ES1 days, the MS guy (Shon K.) suggested stability but we > all agreed not to require it, but I believe he implemented it. This created a > de-facto standard and SpiderMonkey and JSC matched. > > I think V8 has a de-facto bug to fix. I'm ok with requiring stability as a > normative property of Array.prototype.sort given such a V8 bugfix. > > I don't yet see enough value in adding an unstableSort (to Bill F's point). > > /be > > Oliver Hunt wrote: >> JSC switched to an always stable sort years ago due to compatibility >> problems with content targeting firefox and IE depending on it. >> >> We also had issues with inconsistent comparison functions, but i can't >> recall exactly what the reasoning behind it was (nor the exact behavior we >> felt was necessary), but we ended up with an AVL tree being involved, so we >> may be attempting to only compare two elements with each other once. >> Unfortunately this code is a little bit gnarly for me to read and understand >> today :-( >> >> I believe that the spec should mandate a stable sort, but i'm not sure just >> how far we can go in trying to standardize exact behavior of the sort >> without tying implementations to a single implementation for all time. >> >> --Oliver >> >> >> On Jun 13, 2013, at 12:16 PM, Kevin Gadd <kevin.g...@gmail.com >> <mailto:kevin.g...@gmail.com>> wrote: >> >>> I have read the ES specs multiple times, and still accidentally shipped an >>> application that was broken by Array.sort's default behavior in the wild. I >>> know other people who have had the same issues, and people who have read >>> the spec and don't happen to have particular quirks defined in the spec >>> memorized. People are not great at remembering spec details. Simply >>> demanding that all JS developers in the wild read the spec will *not* >>> address these issues. Modern application development occurs on multiple >>> platforms, in multiple languages, using multiple libraries. No matter how >>> many times the spec is read, if the developer is regularly writing and >>> thinking in different languages using different primitives, the primitives >>> that defy trends and act in unexpected ways will always be a stumbling >>> block. The v8 issue and related issue reports against Underscore both serve >>> to demonstrate this. >>> >>> I don't understand why you would intentionally sidetrack a discussion about >>> a simple problem with academic details. Yes, if your goal is to write >>> proofs or rigorously demonstrate that your software is correct all the >>> time, the exact definition of different sort algorithms and terminology >>> really does matter, and yes, it is valuable for people to read the spec. >>> But that is not remotely relevant to the original post in this discussion >>> thread and was not suggested by my replies either. This thread *should* be >>> about whether the ES spec can protect developers from subtle mistakes and >>> errors by changing the specification of Array.sort. Is the point trying to >>> be made here that it is impossible for the spec to clearly communicate that >>> implementations should not do what V8 does, and this communication is >>> impossible because of the academic definition? You haven't even once >>> addressed the original core question of whether it would be possible to >>> switch Array.sort to being stable, and what the obstacles to that would be. >>> >>> There are examples out there in the wild of how difficult it is to write a >>> performant sort in JS from scratch; you need only look at the Bugzilla bug >>> about self-hosting Array.sort in Spidermonkey. Or we can look at the number >>> of *broken* binary search implementations out in the wild caused by people >>> copying from broken algorithms in textbooks that behave incorrectly in >>> boundary cases. Please, for the love of $deity, do not just tell developers >>> to type a query into stackoverflow and grab the top result. I don't >>> necessarily think that it is automatically the right choice to say 'do it >>> yourself' for a problem like this, though it could easily be correct in >>> this specific case, since Underscore ships a stable sort function. Most >>> developers probably use jQuery and/or Underscore already to make up for the >>> small number of useful primitives in the JS standard library, and that's >>> fine. >>> >>> -kg >>> >>> >>> On Thu, Jun 13, 2013 at 9:50 AM, David Bruant <bruan...@gmail.com >>> <mailto:bruan...@gmail.com>> wrote: >>> >>> Le 13/06/2013 17:56, Kevin Gadd a écrit : >>> >>> I don't really care about the precise language or semantics. >>> >>> Maybe you should. In my opinion, that would certainly help having >>> your case better understood and heard. >>> >>> >>> I just don't want applications to break in the wild because >>> an Array.sort implementation's stability changes based on the >>> number of elements. >>> >>> A stable sort is just a particular case of an unstable sort. So, >>> if a sort is "sometimes unstable", then it is "always unstable". >>> The impression of a stability for some cases is just a distraction. >>> >>> It's also not like if "sort" was confusing like isNaN. "sort" >>> does its job. >>> >>> >>> That feels like a much easier problem to solve than the >>> problem of some browsers being unstable and some being >>> stable. This is absolutely the sort of thing that would bite >>> me as a JS dev and will bite every person who uses my >>> compiler to convert an application. Why would they test with >>> both small and large element counts? >>> >>> They can also read the spec and learn they can't rely on sort >>> stability (second sentence of ES5 - 15.4.4.11 !). Specs aren't >>> just for implementors. As a web developer, I feel it's a >>> time-consuming yet very healthy exercise to read specs to avoid >>> pain later down the road. I wouldn't have said that for ES3, but >>> ES5 is decently developer friendly, especially >>> http://es5.github.io/#x15.4.4.11 with links and all that. >>> >>> If people are unsatisfied with the language sort function, maybe >>> they should pick a different sort function, implement one that >>> fits their need, why not. >>> They can even monkeypatch array#sort! >>> Why not try a stackoverflow sort [1][2]? Try with "stable sort" ;-) >>> >>> David >>> >>> [1] http://xkcd.com/1185/ >>> [2] http://gkoberger.github.io/stacksort/ >>> >>> >>> _______________________________________________ >>> es-discuss mailing list >>> es-discuss@mozilla.org <mailto:es-discuss@mozilla.org> >>> https://mail.mozilla.org/listinfo/es-discuss >> >> _______________________________________________ >> es-discuss mailing list >> es-discuss@mozilla.org >> https://mail.mozilla.org/listinfo/es-discuss > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss