Traversal in insertion order for Set.prototype.add/delete
We need a deterministic order. What deterministic order do you suggest? Why would it be better?
We need a deterministic order. What deterministic order do you suggest? Why would it be better?
Sorry for the confusion, I completely worded that wrong.
I'm specifically referring to the specification sections 23.2.3.1 and 23.2.3.4 (specifying the behaviour for Set#add and Set#delete), which states that:
- Repeat for each e that is an element of entries, *in original insertion
order*
I don't see any real reason why that's needed, unless there's some odd side effects of doing so that I'm not aware of. Sets are meant to be unique and I don't think the order of checking whether the element already exists really matters. I'm not advocating for any change for the deterministic order of iteration in Set#forEach and for-of loops on sets.
I don't understand the issue. Could you give a tiny example test case for checking the specced order vs one for checking the order as you think it should be specced?
You're right that phrase isn't need for probing operations such as used by add and delete. It only matters for iteration operations. In fact, that phrase doesn't appear in the corresponding methods of Map. I'll remove the unnecessary requirement.
Maybe my brain's just fried, but is there any reason for Set.prototype.add and Set.prototype.delete enforcing iteration "by original insertion order"? There aren't any side effects that I know of by iterating through the list of elements in some other order, as all the elements of a set are meant to be unique. Am I missing something?