> On Dec 14, 2017, at 6:03 PM, INADA Naoki <songofaca...@gmail.com> wrote:
> 
> If "dict keeps insertion order" is not language spec and we
> continue to recommend people to use OrderedDict to keep
> order, I want to optimize OrderedDict for creation/iteration
> and memory usage.  (See https://bugs.python.org/issue31265#msg301942 )

I support having regular dicts maintain insertion order but am opposed to Inada 
changing the implementation of collections.OrderedDict   We can have the first 
without having the second.

Over the holidays, I hope to have time to do further analysis and create 
convincing demonstrations of why we want to keep the doubly-linked list 
implementation for collections.OrderedDict().

The current regular dictionary is based on the design I proposed several years 
ago.  The primary goals of that design were compactness and faster iteration 
over the dense arrays of keys and values.   Maintaining order was an artifact 
rather than a design goal.  The design can maintain order but that is not its 
specialty.

In contrast, I gave collections.OrderedDict a different design (later coded in 
C by Eric Snow).  The primary goal was to have efficient maintenance of order 
even for severe workloads such at that imposed by the lru_cache which 
frequently alters order without touching the underlying dict.   Intentionally, 
the OrderedDict has a design that prioritizes ordering capabilities at the 
expense of additional memory overhead and a constant factor worse insertion 
time.

It is still my goal to have collections.OrderedDict have a different design 
with different performance characteristics than regular dicts.  It has some 
order specific methods that regular dicts don't have (such as a move_to_end() 
and a popitem() that pops efficiently from either end).  The OrderedDict needs 
to be good at those operations because that is what differentiates it from 
regular dicts.

The tracker issue https://bugs.python.org/issue31265 is assigned to me and I 
currently do not approve of it going forward.  The sentiment is nice but it 
undoes very intentional design decisions.  In the upcoming months, I will give 
it additional study and will be open minded but it is not cool to use a 
python-dev post as a way to do an end-run around my objections.

Back to the original topic of ordering, it is my feeling that it was inevitable 
that sooner or later we would guarantee ordering for regular dicts.  Once we 
had a performant implementation, the decision would be dominated by how 
convenient it is users.  Also, a single guarantee is simpler for everyone and 
is better than having a hodgepodge of rules stating that X and Y are guaranteed 
while Z is not.

I think an ordering guarantee for regular dicts would be a nice Christmas 
present for our users and developers.

Cheers,


Raymond





_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to