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 > 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. daniel@ gmail. com ( >> 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+unsubscribe@ googlegroups. com ( >> 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+unsubscribe@ googlegroups. com ( > 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. 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.