On 6 November 2017 at 09:43, Raymond Hettinger
<raymond.hettin...@gmail.com> wrote:
> On Nov 4, 2017, at 7:04 PM, Nick Coghlan <ncogh...@gmail.com> wrote:
>> I don't think that situation should change the decision, but I do
>> think it would be helpful if folks that understand CPython's dict
>> implementation could take a look at MicroPython's dict implementation
>> and see if it might be possible for them to avoid having to make that
>> trade-off and instead be able to use a naturally insertion ordered
>> hashmap implementation.
>
> I've just looked at the MicroPython dictionary implementation and think they 
> won't have a problem implementing O(1) compact dicts with ordering.
>
> The likely reason for the confusion is that they are already have an option 
> for an "ordered array" dict variant that does a brute-force linear search.  
> However, their normal hashed lookup is very similar to ours and is easily 
> amenable to being compact and ordered.
>
> See:  
> https://github.com/micropython/micropython/blob/77a48e8cd493c0b0e0ca2d2ad58a110a23c6a232/py/map.c#L139
>
> Pretty much any implementation hashed lookup of keys and values is amenable 
> to being compact and ordered.  Whatever existing logic that looks up an entry 
> becomes a lookup into a table of indices which in turn references a 
> sequential array of keys and values.  This logic is independent of hashing 
> scheme or density, and it has no effect on the number of probes or collision 
> rate.
>
> The cost is an extra level of indirection and an extra array of indices 
> (typically very small). The benefit is faster iteration over the smaller 
> dense key/value array, overall memory savings resulting in improved cache 
> utilization, and the side-effect of remembering insertion order.
>
> Summary:  I think MicroPython will be just fine and if needed I will help 
> create the patch that implements compact-and-ordered behavior.

Nice! That's what I thought based on reading some of the design
discussions about CPython's dict implementation, but I didn't know the
details of either dict implementation well enough to be confident that
the CPython changes would map cleanly to MicroPython's variant.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
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