Гарантируется ли стабильность порядка наборов и словосочетаний Джулии для разных сеансов, платформ и версий? - PullRequest
4 голосов
/ 19 июня 2020

Я попытался запустить следующий код в нескольких сеансах Julia REPL, на MacOSX и Linux, и результаты всегда были точно такими же (в том же порядке):

julia> (Set([1, 2, 3, 4]), Dict(1=>2, 3=>4, 5=>6))
(Set([4, 2, 3, 1]), Dict(3 => 4,5 => 6,1 => 2))

Вопрос : гарантируется ли такое поведение языком для всех сеансов, платформ и версий, а также для всех коллекций на основе ha sh?

Примечания:

  • Я понимаю, что порядок вывода может варьироваться в зависимости от порядка вставки, особенно если есть коллизии ha sh. В моем вопросе предполагается, что порядок вставки постоянный.
  • Этот вопрос связан с моим другим вопросом о стабильности самой функции hash() (она тесно связана, но отличается).

1 Ответ

5 голосов
/ 19 июня 2020

Нет, это часть внутренней реализации, и, как всегда с внутренними вещами, разработчики не гарантируют, что поведение порядка будет одинаковым для разных платформ и версий.

В то же время, если вы хотите чтобы иметь структуру Set или Dict с гарантированным порядком, вы можете использовать OrderedCollections.jl или Dictionaries.jl , которые сохраняют порядок. Что касается словарей, вы также можете прочитать темы this и this , потому что у них есть и другие приятные функции, кроме сохранения порядка.

...