[Python-3000] PEP 3108: Standard Library Reorganization

Giovanni Bajo rasky at develer.com
Tue Jan 2 01:52:00 CET 2007


Brett Cannon wrote:

> * fileinput
>     + Basic functionality handled by ``itertools.chain``.
>     + Using ``enumerate`` (for the line number in the file),
>       ``itertools.repeat`` (for returning the filename with each
>       line), and ``zip`` (for connecting the ``enumerate`` object and
>       ``itertools.repeat`` object)  provides 95% of other unique
>       abilities of fileinput.

How would you rewrite this without fileinput:

====== cat.py ======
import sys
import fileinput

for L in fileinput.input():
     sys.stdout.write(L)
====================

The very concise call to input() lets you handle many different issues at once 
and implement a natural interface for a text-mungling program (accepts one or 
more file names, default to stdin, if "-" is specified it means stdin, and so on).

I think this module should stay. Its most important feature is that it lets 
you implement a de-facto standard interface with a single call.


> The C module is to be given a leading underscore to delineate the fact
> that it is not the reference implementation (the Python implementation
> is).  This means that any semantic difference between the C and Python
> versions must be dealt with before Python 3.0 or else the C
> implementation will be removed until it can be fixed.

Why should always the Python implementation be the reference one? Of the three 
examples you did, in two cases (cPickle and cStringIO) the C implementation is 
much faster. In fact, I would suggest to remove the Python implementation if 
any...

> * profile/cProfile
>     + Rename cProfile to profile.
>     + Semantic completeness of C implementation *not* verified.

Is this an editor mistake? Where does the current "profile" go? Are you 
suggesting to remove it?

> Modules will be renamed in Python 2.6 .  The original names of the
> modules will still work but will raise ImportWarning upon import.  The
> refactoring tool for transitioning to Python 3.0 will refactor imports
> that use the original names to the new names.

Does that mean that a very large amount of existing Python code will raise an 
ImportWarning under Python 2.6? I don't think this is acceptable. Why should 
the users be bothered with deprectation warnings related to Python 3.0? Surely 
the *developers* are the only ones interested in this.

A PendingDeprecationWarning is fine in this case too I guess. Or you could 
introduce a specific Py3kDeprecationWarning, turned on with a mystical -3 
command line option (in which we can join all the features to help porting 
source code to Py3k).


>     + UserDist
>     + UserList
>     + What to do with UserString?

BTW, aren't the User* modules a relic of when builtin types weren't 
subclassable? Are they still useful now? Really a genuine question...
-- 
Giovanni Bajo



More information about the Python-3000 mailing list