Re[5]: Java Interop - один и тот же код возвращает разные значения
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.03.25 12:10
Оценка:
Здравствуйте, Кодт, Вы писали:

M>>Если это документированное поведение, то в чём проблема? Не устраивает — пиши свою сортировку.


К>А если недокументированное?

К>В доке на HashMap сказано, что он не даёт никаких гарантий на порядок.
К>Но не сказано, что он рандомизирует намеренно.

Но и не запрещено ведь?
Вспоминаем Python: начиная с 2.7 в вычислении хэша для выбора корзины участвует параметр, случайно выбираемый на старте интерпретатора. До 3.5 включительно он также влиял на порядок перебора штатными средствами (начиная с 3.6 принят порядок вставления, как в Java LinkedHashMap или во всех реализациях в JS). И это намеренно сделано как секьюрити фича.

Кто запретит в разных запусках одного и того же кода получать разный порядок перебора?
ASLR уже есть (виден только на уровне ассемблера, но есть).

К>Например, в C++ std::sort нестабильный, но чистый.

К>std::unordered_map не даёт гарантий, но опять-таки чистый: два одинаково сформированных мапа (последовательность вызовов reserve и insert) одинаково итерируются.

Хотелось бы увидеть эту гарантию в стандарте. Или её явное отсутствие. Я не нашёл в тексте стандарта, как и для Java HashMap.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.