pep-550: Add a note why HAMT is better than dict.copy() (#347)
* pep-550: Add a note why HAMT is better than dict.copy() * pep-550: Drop now unused images
This commit is contained in:
parent
f67bb4e465
commit
5207a074cf
Binary file not shown.
Before Width: | Height: | Size: 44 KiB |
Binary file not shown.
Before Width: | Height: | Size: 34 KiB |
Binary file not shown.
Before Width: | Height: | Size: 38 KiB |
Binary file not shown.
Before Width: | Height: | Size: 41 KiB |
18
pep-0550.rst
18
pep-0550.rst
|
@ -1041,6 +1041,11 @@ This proposal preserves 100% backwards compatibility.
|
||||||
Appendix: HAMT Performance
|
Appendix: HAMT Performance
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
First, while investigating possibilities of how to implement an
|
||||||
|
immutable mapping in CPython, we were able to improve the efficiency
|
||||||
|
of ``dict.copy()`` up to 5 times: [4]_. All benchmarks in this
|
||||||
|
section were run against the optimized dict.
|
||||||
|
|
||||||
To assess if HAMT can be used for Execution Context, we implemented
|
To assess if HAMT can be used for Execution Context, we implemented
|
||||||
it in CPython [7]_.
|
it in CPython [7]_.
|
||||||
|
|
||||||
|
@ -1067,6 +1072,19 @@ considering how well Python dicts are optimized.
|
||||||
|
|
||||||
Note, that according to [8]_, HAMT design can be further improved.
|
Note, that according to [8]_, HAMT design can be further improved.
|
||||||
|
|
||||||
|
There is a limitation of Python ``dict`` design which makes HAMT
|
||||||
|
the preferred choice for immutable mapping implementation:
|
||||||
|
dicts need to be resized periodically, and resize is expensive.
|
||||||
|
The ``dict.copy()`` optimization we were able to do (see [4]_) will
|
||||||
|
only work for dicts that had no deleted items. Dicts that had
|
||||||
|
deleted items need to be resized during ``copy()``, which makes it
|
||||||
|
much slower.
|
||||||
|
|
||||||
|
Because adding and deleting items from LocalContext is a very common
|
||||||
|
operation, we would not be able to always use the optimized
|
||||||
|
``dict.copy()`` for LocalContext, frequently resorting to use the
|
||||||
|
slower version of it.
|
||||||
|
|
||||||
|
|
||||||
Acknowledgments
|
Acknowledgments
|
||||||
===============
|
===============
|
||||||
|
|
Loading…
Reference in New Issue