2015-12-15 12:23 GMT+01:00 Franklin? Lee <leewangzhong+pyt...@gmail.com>:
> I was thinking (as an alternative to versioning dicts) about a
> dictionary which would be able to return name/value pairs, which would
> also be internally used by the dictionary. This would be way less
> sensitive to irrelevant changes in the scope dictionary, but cost an
> extra pointer to each key.

Do you have an estimation of the cost of the "extra pointer"? Impact
on memory and CPU. dict is really a very important type for the
performance of Python. If you make dict slower, I'm sure that Python
overall will be slower.

>     del scope[name]
>     assert pair.key is None

It looks tricky to keep the dict and the pair objects consistent,
especially in term of atomaticity. You will need to keep a reference
to the pair object in the dict entry, which will also make the dict
larger (use more memory), right?

> You won't have to keep looking up keys (unless the name is deleted), and
> functions are allowed to change. For inlining, you can detect whether
> the function has been redefined by testing the saved pair.value
> against the saved function, and go into the slow path if needed (or
> recompile the inlining).

For builtin functions, I also need to detect when a key is created in
the global namespace. How do you handle this case with pairs?

> If memory is a real concern, deleted pairs can be weakrefed (and saved
> in a second dict?) until they are reused. This way, pairs which aren't
> saved by something outside will be removed.

Supporting weak references also has a cost on the memory footprint...

For FAT Python, not being able to detect quickly when a new key is
created is a blocker point.

Victor
_______________________________________________
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