On Wed, 22 Jul 2020 at 15:35, Antoine Pitrou <solip...@pitrou.net> wrote:

> The deltas also look small for a micro-benchmark.  I certainly don't
> think this is a sufficient reason to add a new datatype to Python.
>

I think some of the optimizations can be experimented with dict itself.

Deltas seem to be small, because I divide them by the number of timeit
runs. I think that a 30-45% gain in constructor speed is not something
small. The benchmarks in question have the Name that starts with
"constructor".

PS: sorry for double mail, I sent this message to only you by mistake.

On Wed, 22 Jul 2020 at 18:26, Guido van Rossum <gu...@python.org> wrote:

> Did you study PEP 416 (frozendict) and PEP 603 (frozenmap)?
>

Yes. About frozenmap, at the very start I added to the benchmarks also
immutables.Map, but I removed it when I realized that it was slower than
frozendict in every bench. Maybe this is because immutables.Map is a C
extension and not a builtin type.

About PEP 416, yes, I tried to follow it. Indeed hash is calculated using
the strategy described in the PEP. I also take a look to frozenset and
tuple code.

Frankly I must admit that the rejection of PEP 416 was a good idea. Indeed
I started to implement an immutable dict only for a symmetry reason, and
because I am somewhat fascinated by functional programming and immutables,
without a rational reason.
I suppose I would have given up and admitted that a frozendict is quite
useless in Python, if I did not see that the constructor speed can be
faster.

I'm not sure 100% of the result. This is why I'm suggesting to try to
implement the speed optimizations to the constructor of dict first:
1. the optimizations could be not safe. Indeed recently I got a segfault
that I have to investigate
2. maybe dict can be really optimized further. After that, the difference
between dict and frozendict performance could be minimal

That said, maybe there are four good use cases for a frozendict:
1. they could be used for __annotations__ of function objects, and similar
cases
2. they could be used to implement "immutable" modules or classes
3. frozendict can be easily cached, like tuples.
4. as I said, as an alternative to MappingProxyType, since it's very slow
and it's used also in the C code of CPython and in the Python stdlib. This
maybe is not useful because:
    a. the speed of MappingProxyType can be improved
    b. MappingProxyType can't be replaced because you *really* want and
need a proxy
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/6SHJQICZRZ7VTQRNLCEVYL653UOC4NZE/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to