On 08/11/2015 11:02, Marko Rauhamaa wrote:
Bartc <b...@freeuk.com>:

(In the case of Python, the main obstacle is that a constant name from
inside an imported module is not visible when this module is compiled
to byte-code. So it has to assume it can be anything.)

Which it can.
....
That elegant dynamism comes at a cost: method lookup is not a constant
memory offset. Rather, it is a dictionary lookup.

I've never understood why this seems to be necessary in Python. Why do names have to be looked up? (I'm assuming this is searching by name in some sort of table.)

When a module is compiled, while the compiler can't see the definitions inside the imported modules, it /will/ know all the names that appear in this module, so it can organise them into fixed tables. Then the names can be referred to by index. (I think LOAD_FAST does this.)

Or is eval() the culprit here by making most optimisations impossible?

--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to