[Python-Dev] PEP: __source__ proposal
"Martin v. Löwis"
martin at v.loewis.de
Sat Dec 4 00:26:33 CET 2004
Stelios Xanthakis wrote:
> Now that 2.4 is out and everything maybe it's
> about time to start discussing the "use the
> __source__ Luke" feature which IMO will really
> boost python into a new domain of exciting
I'm opposed to this idea. It creates overhead in
the size of .pyc files, for no additional value
that couldn't be obtained otherwise.
As the rationale, the PEP lists:
> It is generally a tempting idea to use python as an interface to
> a program.
I cannot see how this rationale is related to the PEP. You
can use Python as interface to a program with or without
> The developers can implement all the functionality
> and instead of designing a user interface, provide a python
> interpreter to their users.
This does not require __source, either.
> A much more powerful approach would be an interface which is
> dynamically constructed by the user to meet the user's needs.
Dynamic code generation doesn't require __source__, either.
> The most common development cycle of python programs is:
> write .py file - execute .py file - exit - enhance .py file -
> execute .py file - etc. With the implementation of the __source__
> attribute though the development/modification of python code
> can happen at run-time.
This works just fine as well at the moment; see IDLE for an
> Functions and classes can be defined,
> modified or enhanced while the python shell is running and
> all the changes can be saved by saving the __source__ attribute
> of globals before termination.
Currently, you can define classes dynamically, and you can also save
the source code of the class to a file in case you need it later.
> Moreover, in such a system
> it is possible to modify the "code modification routines" and
> eventually we have a self-modifying interface. Using a
> program also means improving its usability.
Self-modifying source code is currently also possible. Just read
the old source code from a .py file, modify it, and recompile it.
> The current solution of using 'inspect' to get the source
> code of functions is not adequate because it doesn't work
> for code defined with "exec" and it doesn't have the source
> of functions/classes defined in the interactive mode.
I fail to see why it isn't adequate. Anybody who wants to modify
source code that was originally passed to exec just needs to
preserve a copy of the source code, separately.
> a "file" is something too abstract. What is more real is the
> data received by the python parser and that is what is stored
> in __source__.
Not at all. A file is precisely the level of granularity that is
burnt into the Python language. A module is *always* a file, executed
from top to bottom. It is not possible to recreate the source code
of a module if you have only the source code of all functions, and
More information about the Python-Dev