[Python-Dev] towards a faster Python

M.-A. Lemburg mal@lemburg.com
Tue, 10 Jun 2003 16:32:41 +0200


Guido van Rossum wrote:
>>1. Extending builtins should still be possible like it is now.
>>
>>    Of course, the extensions wouldn't take part in the optimizations
>>    you have in mind, but they should still be found.
> 
> 
> I'm not sure what you mean by "extending builtins", but if it is what
> I think it is, I am strongly opposed.  The builtins should have fixed
> capabilities (in a particular Python version).  If you want a function
> that behaves just like a builtin but also can do something else, give
> it a different name and import it explicitly, don't override the
> existing entry in __builtin__.  If you have a new function that you
> want to use in lots of code, resist the temptation to add it to the
> __builtin__ module.  Zope did this e.g. with get_transaction() and the
> net result was reader confusion and intractable dependencies on import
> order.

I am talking about what mxTools is doing: adding new builtins to
the interpreter by placing them into the __builtins__ dictionary.
While I agree that it is usually better to use something like
'from x import *' or even naming the tools explicitly, some features
in mxTools do warrant being made builtins, e.g. irange() has been
most helpful in the past :-)

Note that I'm not talking about overriding existing builtins. mxTools
just adds a few more (that's what I meant with "extending builtins").

>>2. What happens if a new Python version introduces new builtins
>>    that are in use by some modules out there for other purposes ?
> 
> *** THIS IS NOT AFFECTED! ***
> 
> There is no proposal on the table to ban the use of identifiers known
> to be built-ins for any purpose.  If a module defines a class,
> function or variable that shadows a builtin name, that's fine, because
> the parser has no problem detecting this situation.
> 
> The *only* thing being banned is insertion of a new name that shadows
> a builtin from outside a module.
> 
> IOW:
> 
>   # module foo
>   def open(): return ...
> 
> is fine, but
> 
>   import foo
>   foo.open = 42
> 
> is not.

I presume you mean the case that foo.open is not already defined in
foo. That's good.

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Software directly from the Source  (#1, Jun 10 2003)
 >>> Python/Zope Products & Consulting ...         http://www.egenix.com/
 >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________
EuroPython 2003, Charleroi, Belgium:                        14 days left