Interesting, I would never expect Map.to_list/1 like functions guarantee results in specific order especially if these maps are equal %{a: 1, b: 2}, %{b: 2, a: 1}.
In example you've given, we have numbers as string keys and the items order after conversion to a list you expect is unclear given that strings sorted differently than numbers ("9" > "100" => true). > On 30 Oct 2022, at 00:27, Zach Daniel <zachary.s.dan...@gmail.com> wrote: > > The way that this can lead to bugs is when you dynamically build a map, and > then later iterate over the keys and values in some way that depends on the > order (which is the actual bug here) but you don't notice because the map has > a stable sort. In this instance, we had code in AshPhoenix that was working > with the params that come back from a Phoenix.HTML.FormData form, that looks > like this: > > %{"0" ⇒ …, "1" ⇒ …., "2" ⇒ ….} > > And we then turn that into a structure like `[%{...}, %{...}, %{...}]` and we > were not properly sorting. The test suite didn't ever use 10 or more > elements, but when a user did, they saw their forms no longer coming back in > the order they were in the HTML, but form 10 was after form 1, because the > map was string key sorted. This is just one example, I've been bitten by this > a few times. The actual problem is of course iterating over a map when the > order matters, but the point is that by having a predictable, stable behavior > below 32 elements, it increases the likelihood that a programmer wouldn't > notice that they had done that. > > With that said, based on the value being baked into the VM as a C constant, > its definitely not worth the effort to find some way to alleviate this issue > > > On Sat, Oct 29, 2022 at 4:19 PM, Boris Kuznetsov <m...@achempion.com > <mailto:m...@achempion.com>> wrote: > Could someone please share an example when it can lead to bugs in a system > > To me maps are simple key/value data structure which gets accessed through > direct work with a key or pattern matched against > >> On 28 Oct 2022, at 06:20, Zach Daniel <zachary.s.dan...@gmail.com >> <mailto:zachary.s.dan...@gmail.com>> wrote: >> >> Myself and many other developers have been bitten by the fact that maps are >> sorted if they have less than 33 elements. Not because we believed that we >> should rely on the sort ordering of a map, but because we *accidentally* >> wrote an implementation that did, and didn't test it with more than 32 >> elements. Then at some point later in actual use things get strange, and >> debugging the above scenario can be very difficult (but is of course obvious >> in retrospect). This could be opt-in or opt-out, all the same to me, >> although unless the performance impacts are huge I think that it would save >> new developers even more time than experienced developers and so should >> potentially be opt-out. After a while when you start to see things "showing >> up in weird orders" you have an intuition to go look for a map being >> enumerated, but that isn't something a beginner would likely think of. >> >> As far as I know this is an erlang thing, but I'm not too familiar with >> erlang and thought I'd float it by the elixir group first. I'm also not sure >> if its possible to change those constants based on Mix environments (or to >> change them at all), but I imagine that is where it will intersect with >> Elixir. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "elixir-lang-core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to elixir-lang-core+unsubscr...@googlegroups.com >> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/a528c1bb-b8e1-429c-b1ff-a98db36ee2d6n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/a528c1bb-b8e1-429c-b1ff-a98db36ee2d6n%40googlegroups.com?utm_medium=email&utm_source=footer>. > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to elixir-lang-core+unsubscr...@googlegroups.com > <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/8C768E7E-61D7-4B69-956D-16567D2998DC%40achempion.com > > <https://groups.google.com/d/msgid/elixir-lang-core/8C768E7E-61D7-4B69-956D-16567D2998DC%40achempion.com?utm_medium=email&utm_source=footer>. > > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to elixir-lang-core+unsubscr...@googlegroups.com > <mailto:elixir-lang-core+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/l9uhk9qo.38af49dc-4df8-4c53-8ff7-493fad67302b%40we.are.superhuman.com > > <https://groups.google.com/d/msgid/elixir-lang-core/l9uhk9qo.38af49dc-4df8-4c53-8ff7-493fad67302b%40we.are.superhuman.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/1021D9B7-68B5-469E-AAE4-71753FF85ADD%40achempion.com.