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