Comment on draft PEP for deprecating six builtins

Raymond Hettinger python at rcn.com
Mon Apr 29 01:34:58 EDT 2002


Please send me comments on a draft PEP deprecating
and relocating six built-in functions.  The text file is at:
http://users.rcn.com/python/download/deppep.txt

It is also listed below.


Raymond Hettinger

-------------------------------------------------------------------

PEP: XXX
Title: Deprecate Six Built-ins
Version: $Revision: 1.1 $
Last-Modified: $Date: 2002/04/28 19:42:56 $
Author: python at rcn.com (Raymond D. Hettinger)
Status: Draft
Type: Standards Track
Created: 28-Apr-2002
Python-Version: 2.3
Post-History:


Abstract

    This PEP proposes to compact the list of built-in functions through
    relocation and deprecation.  map(), reduce() and filter() would move to
a
    separate module for functionals.  pow() and divmod() would move to into
    the math module.  input() would be eliminated altogether.



Rationale

    There are separate motivations for each function.  One motivation in
    common is that the number of total built-ins should be as small as
    possible to limit the amount of "core language" one needs to know in
order
    to read code that is not module specific.

    The functionals (map, filter, and reduce) had greater importance prior
to
    the introduction of list comprehensions which are now the preferred (and
    more readable) approach.  Limits on the number of built-in functions
    prevented the addition of other functionals which may have be useful
when
    that style of programming is needed.  Creating a separate module allows
    room for a large variety of functionals (e.g. fold, head, tail, take,
    drop, etc.) to be introduced without cluttering the built-in namespace.

    Pow() and divmod() are more related to math module functions than any
    of the built-in functions.  In general, they are rarely used.  Because
    the ** operator is available, the pow() function is rarely called
    directly.

    Input() is easily replaced by eval(raw_input()).  It has few legitimate
    uses and presents a security risk in most programs where it is used.
    Though the risks are well documented, experience on python-tutor and
    help at python.org indicates that new users frequently use input() when
    raw_input() was intended and that they are unaware of the embedded
eval().



Key Issue

    All of these functions have been in-place since the beginning, are used
    in mountains of code, and appear in every Python book.  The situation
    would appear to be immovable.

    I propose that a simple means be provided to re-enable those functions
at
    will when they are needed to run old code.  Add a command line option -b
    and an equivalent environment variable, PYTHONBUILTINRESTORE which would
    start-up Python by running:

        from functionals import map, filter, reduce
        from math import pow, divmod
        from deprecated import input



Implementation and Deprecation Timetable

    The module additions would go into Python 2.3.  All six functions would
be
    left intact and raise deprecation warnings in Python 2.3 and 2.4.  The
six
    functions would be removed in Python 2.5 (having allowed two versions
and
    a full year for code updates).  The -b command line option and related
    environment variable would go into Python 2.3 and remain available
    in perpetuity.  Like "from __future__" this mechanism can be used for
    other deprecations, allowing the language to evolve without accumulating
    clutter.



Copyright

    This document has been placed in the public domain.



Local Variables:
mode: indented-text
indent-tabs-mode: nil
fill-column: 70
End:








More information about the Python-list mailing list