Подробнее
ПРЕДПОЧИТАЮ
■ 1 1 Ш® с А и » 1 Э яЕЖ^Л
< я кН
На
^^ттят
ИЙ^0М86211
•V"ж и
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
Просто манкикодеры не в курсе что по умолчанию JS использует лексикографическую сортировку для данного метода и что в качестве аргумента можно передать функцию которая и будет определять порядок сортировки.
Ну и...? Объясни почему я должен это считать за преимущество, а не упущение в архитектуре? В C# давно тоже были списки нетипизированные, но через пару лет ввели дженерики.
Ну типа ex1st, говорит, что говно не может быть говном, если там описано в стандартах.
На дворе 2019 год. Почему нельзя запилить нормальную сортировку и уйти от спорных решений?
Они вон нормальное наследование только в 2015 году добавили...
За кулисами может быть, но теперь не нужно трахаться с дополнительными действиями.
Это все равно, что сказать "А зачем в ООП языках наследования, ведь в ассемблере один и тот же код!"
Потому что поведение одно - захреначь ты туда строку, число или чёрта в ступе. Его просто нужно знать(прочитав доку по методу).
В этом изначальная суть js: срать на типы - полная свобода (говно)кода.
Тебе может это не нравиться, тебе может даже это быть отвратительно, но это чувство свободы - именно то самое "преимущество" о котором ты спрашиваешь.
То, что ты пытаешься приплести дженерики и снова свести всё к ручной типизаци - явно показывает, что ты не улавливаешь этой самой "изначальной сути" js.
Конечно я бы добавил в современный js и дженерики и типизацию - но исключительно опционально, чтоб не заниматься онанизмом типоблудием там где это не нужно.
Пока же можно юзать typescript.
в V8 (первый линк) - прямо на писано: "The “default” comparison function calls toString on both values and does a lexicographical comparison on the string representations."
по второму линку, проблема в конкретной версии (а точнее в ее авторах), стандарт четно прописывает:
- отрицательное значение, если второй аргумент больше первого;
- 0 - если равны;
- положительное, если первый аргумент больше второго.
Это проблема не языка, а разработчика.
Разные компиляторы С/С++ по разному считают выражение (++i + ++i), но почему-то С/С++ не хейтится, а возводится в идеал
Я не спорю и не хейтю, я лишь указал, что для Array.prototype.sort нет стандарта на алгоритм сортировки, потому Quick Sort и Stable Sort по разному ставят элементы при одинаковых результатах сравнения. Мой посыл неправильно поняли.
Ну а в чем проблема его ввести? На дворе 2019 год и веб наконец-то более менее был стандартизирован благодаря тому, что почти все используют один и тот же движок. Обратная совместимость? Так введите ключевое слово 'USE Legacy', чтобы не сломать старый код.
> потому Quick Sort и Stable Sort по разному
Стабильная сортировка - это не название алгоритма сортировки. Это его свойство. Ваша фраза означает приблизительно следующее:
Фрукты бывают яблоки и красные.
Quick Sort может быть и стабильным, и нестабильным, зависимо от реализации.
И да, спецификация не гарантирует, что в языке будет использоваться стабильный алгоритм сортировки.
Кстати, так же она не гарантирует сохранность порядка ключей в хеше
Чувак, UB никак не регламентируется.
Разница с С/С++ в том, что (по теме сортировки) есть библиотеки, которые гарантируют (или нет) результат.
Boost к примеру тебе даст выбор, а ты думай - быстрее или точно.
А в JS такого выбора нет, как браузер решил - так будет.
Вот где жопа.
А ты думал почему все хейтят JS?
Умный? Суть в том, что сишка результатом имеет машинный код до клиента, как бы что кодер решил (ядро ОС, к примеру), я JS - джит решает, и каждый браузер сам думает... Ты явно тупой.
Еще раз, для джунов. Читай медленно: ты можешь явно задать функцию сравнения. Сравнения функцию. Явно. Для сортировки. Можешь задать. Ты. И она будет одинаково работать на всех браузерах. И сортировать будет одинаково.
Если ты не задаешь функцию - ты сталкиваешься с умолчаниями, которые могут отличаться.
P.S.: А чего ты тогда не гонишь заодно на Яву и вообще все языки-интерпретаторы? Там нет "машинного кода до клиента".
Но хейтить JS, это ж не спецификацию изучить....
это норма!
На дворе 2019 год. Почему нельзя запилить нормальную сортировку и уйти от спорных решений?
Они вон нормальное наследование только в 2015 году добавили...
Это все равно, что сказать "А зачем в ООП языках наследования, ведь в ассемблере один и тот же код!"
В этом изначальная суть js: срать на типы - полная свобода (говно)кода.
Тебе может это не нравиться, тебе может даже это быть отвратительно, но это чувство свободы - именно то самое "преимущество" о котором ты спрашиваешь.
То, что ты пытаешься приплести дженерики и снова свести всё к ручной типизаци - явно показывает, что ты не улавливаешь этой самой "изначальной сути" js.
Конечно я бы добавил в современный js и дженерики и типизацию - но исключительно опционально, чтоб не заниматься
онанизмомтипоблудием там где это не нужно.Пока же можно юзать typescript.
https://v8.dev/blog/array-sort
https://github.com/nodejs/node/issues/27871
по второму линку, проблема в конкретной версии (а точнее в ее авторах), стандарт четно прописывает:
- отрицательное значение, если второй аргумент больше первого;
- 0 - если равны;
- положительное, если первый аргумент больше второго.
Это проблема не языка, а разработчика.
Разные компиляторы С/С++ по разному считают выражение (++i + ++i), но почему-то С/С++ не хейтится, а возводится в идеал
Стабильная сортировка - это не название алгоритма сортировки. Это его свойство. Ваша фраза означает приблизительно следующее:
Фрукты бывают яблоки и красные.
Quick Sort может быть и стабильным, и нестабильным, зависимо от реализации.
И да, спецификация не гарантирует, что в языке будет использоваться стабильный алгоритм сортировки.
Кстати, так же она не гарантирует сохранность порядка ключей в хеше
Разница с С/С++ в том, что (по теме сортировки) есть библиотеки, которые гарантируют (или нет) результат.
Boost к примеру тебе даст выбор, а ты думай - быстрее или точно.
А в JS такого выбора нет, как браузер решил - так будет.
Вот где жопа.
А ты думал почему все хейтят JS?
Если ты не задаешь функцию - ты сталкиваешься с умолчаниями, которые могут отличаться.
P.S.: А чего ты тогда не гонишь заодно на Яву и вообще все языки-интерпретаторы? Там нет "машинного кода до клиента".