[Python-Dev] Guarantee ordered dict literals in v3.7? (original) (raw)

Nathaniel Smith njs at pobox.com
Sun Nov 5 19:31:05 EST 2017


On Nov 5, 2017 2:41 PM, "Paul Ganssle" <pganssle at gmail.com> wrote:

I think the question of whether any specific implementation of dict could be made faster for a given architecture or even that the trade-offs made by CPython are generally the right ones is kinda beside the point. It's certainly feasible that an implementation that does not preserve ordering could be better for some implementation of Python, and the question is really how much is gained by changing the language semantics in such a way as to cut off that possibility.

The language definition is not nothing, but I think it's easy to overestimate its importance. CPython does in practice provide ordering guarantees for dicts, and this solves a whole bunch of pain points: it makes json roundtripping work better, it gives ordered kwargs, it makes it possible for metaclasses to see the order class items were defined, etc. And we got all these goodies for better-than-free: the new dict is faster and uses less memory. So it seems very unlikely that CPython is going to revert this change in the foreseeable future, and that means people will write code that depends on this, and that means in practice reverting it will become impossible due to backcompat and it will be important for other interpreters to implement, regardless of what the language definition says.

That said, there are real benefits to putting this in the spec. Given that we're not going to get rid of it, we might as well reward the minority of programmers who are conscientious about following the spec by letting them use it too. And there were multiple PEPs that went away when this was merged; no one wants to resurrect them just for hypothetical future implementations that may never exist. And putting it in the spec will mean that we can stop having this argument over and over with the same points rehashed for those who missed the last one. (This isn't aimed at you or anything; it's not your fault you don't know all these arguments off the top of your head, because how would you? But it is a reality of mailing list dynamics that rehashing this kind of thing sucks up energy without producing much.)

MicroPython deviates from the language spec in lots of ways. Hopefully this won't need to be another one, but it won't be the end of the world if it is.

-n -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20171105/dfe90108/attachment.html>



More information about the Python-Dev mailing list