python-dev Summary for 2004-03-16 through 2004-03-31
Brett C.
bac at OCF.Berkeley.EDU
Sat Apr 17 23:29:08 EDT 2004
python-dev Summary for 2004-03-16 through 2004-03-31
++++++++++++++++++++++++++++++++++++++++++++++++++++
This is a summary of traffic on the `python-dev mailing list`_ from
March 16, 2004 through March 31, 2004. It is intended to inform the
wider Python community of on-going developments on the list. To comment
on anything mentioned here, just post to `comp.lang.python`_ (or email
python-list at python.org which is a gateway to the newsgroup) with a
subject line mentioning what you are discussing. All python-dev members
are interested in seeing ideas discussed by the community, so don't
hesitate to take a stance on something. And if all of this really
interests you then get involved and join `python-dev`_!
This is the thirty-eighth summary written by Brett Cannon (who managed to
actually convince someone to employ him for the summer).
To contact me, please send email to brett at python.org ; I do not have
the time to keep up on comp.lang.python and thus do not always catch
follow-ups posted there.
All summaries are archived at http://www.python.org/dev/summary/ .
Please note that this summary is written using reStructuredText_ which
can be found at http://docutils.sf.net/rst.html . Any unfamiliar
punctuation is probably markup for reST_ (otherwise it is probably
regular expression syntax or a typo =); you can safely ignore it,
although I suggest learning reST; it's simple and is accepted for `PEP
markup`_ and gives some perks for the HTML output. Also, because of the
wonders of programs that like to reformat text, I cannot guarantee you
will be able to run the text version of this summary through Docutils_
as-is unless it is from the `original text file`_.
.. _PEP Markup: http://www.python.org/peps/pep-0012.html
The in-development version of the documentation for Python can be found at
http://www.python.org/dev/doc/devel/ and should be used when looking up any
documentation on new code; otherwise use the current documentation as
found at
http://docs.python.org/ . PEPs (Python Enhancement Proposals) are
located at http://www.python.org/peps/ . To view files in the Python
CVS online, go to http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/python/
. Reported bugs and suggested patches can be found at the SourceForge_
project page.
The `Python Software Foundation`_ is the non-profit organization that
holds the intellectual property for Python. It also tries to forward
the development and use of Python. But the PSF_ cannot do this without
donations. You can make a donation at
http://python.org/psf/donations.html . Every penny helps so even a
small donation (you can donate through PayPal or by check) helps.
.. _python-dev: http://www.python.org/dev/
.. _SourceForge: http://sourceforge.net/tracker/?group_id=5470
.. _python-dev mailing list:
http://mail.python.org/mailman/listinfo/python-dev
.. _comp.lang.python: http://groups.google.com/groups?q=comp.lang.python
.. _Docutils: http://docutils.sf.net/
.. _reST:
.. _reStructuredText: http://docutils.sf.net/rst.html
.. _PSF:
.. _Python Software Foundation: http://python.org/psf/
.. contents::
.. _last summary:
http://www.python.org/dev/summary/2004-03-16_2004-03-31.html
.. _original text file:
http://www.python.org/dev/summary/2004-03-16_2004-03-31.ht
=====================
Summary Announcements
=====================
Well, I am no longer looking for a summer job! One of my professors was
gracious enough to offer me a research position with him for the summer
working
on Internet2 stuff so the summer job request is now gone... until next
summer.
=)
PyCon_ happened during the timespan this summary covers. Unlike last
year when emails to python-dev actually went down, there was a good
amount of traffic at the conference. A good portion of this was due to
the sprint on Python's core that took place. A bunch of core developers
showed up for the whole weekend and used part of that time to answer
emails. Great for python-dev but made my life a little difficult. =)
But the sprint overall was a definite gain with various tweaks done,
improvements to the profiler, and a bunch of bugs and patches closed
(actually had the number of open patches and bugs have a net loss of 7
and 10 from that week, respectively; that has not happened in a while).
The release schedule (and thus what is definitely planned and what can
go in if it gets finished in time) was set while at PyCon. Read the
summary entitled `Python 2.4 release schedule`_ below for details and links.
.. _PyCon: http://www.pycon.org/
=========
Summaries
=========
----------------------------
"I want to be like Raymond!"
----------------------------
So, you want to speed up Python like Raymond Hettinger has? Well, he
posted an email listing various optimizations he has on his list to try
out. That specific email can be found at
http://mail.python.org/pipermail/python-dev/2004-March/043276.html
This also brought back the debate of whether pure Python modules should
be recoded in C for performance. See previous threads for a longer
discussion on the subject.
Contributing threads:
- `Joys of Optimization
<http://mail.python.org/pipermail/python-dev/2004-March/043276.html>`__
- `todo (was: Joys of Optimization)
<http://mail.python.org/pipermail/python-dev/2004-March/043335.html>`__
--------------
Decimal update
--------------
`PEP 327`_ was revised to make certain issues more explicit and to
discuss possible function naming (summarized below). This lead to a
discussion about how to name various things. Although there are
historical violations of the coding standard, the names should follow
`PEP 7`_ and `PEP 8`_.
The testing suite is also finished along with the PEP essentially being
finished.
.. _PEP 327: http://www.python.org/peps/pep-0327.html
Contributing threads:
- `Changes to PEP 327: Decimal data type
<http://mail.python.org/pipermail/python-dev/2004-March/043155.html>`__
- `PEP 327: Decimal data type
<http://mail.python.org/pipermail/python-dev/2004-March/043809.html>`__
--------------------------------------------------------------------------
<in a stereotypical coach voice>Follow the coding standard, people</voice>
--------------------------------------------------------------------------
Discussing naming conventions came up while discussing PEP 327. The
basic conclusion is that older modules don't follow the coding standards
laid out in `PEP 7`_ and `PEP 8`_, but that does not mean new code
should be allowed to break the rules.
.. _PEP 7: http://www.python.org/peps/pep-0007.html
.. _PEP 8: http://www.python.org/peps/pep-0008.html
Contributing threads:
- `Changes to PEP 327: Decimal data type
<http://mail.python.org/pipermail/python-dev/2004-March/043155.html>`__
- `(class) module names clarification
<http://mail.python.org/pipermail/python-dev/2004-March/043265.html>`__
- `(old) module names
<http://mail.python.org/pipermail/python-dev/2004-March/043286.html>`__
----------------------------------------------------
"It depends on what the meaning of the word 'is' is"
----------------------------------------------------
The idea of redefining how 'is' operates when comparing immutable types
came up. It was suggested that when two immutable objects of the same
type were being compared that it should be an equivalence test instead
of an identity test. For instance::
>>> x = 99
>>> y = 99
>>> x is y
True
while::
>>> x = 100
>>> y = 100
>>> x is y
False
is false. The point was made, though, that unless you are comparing to
None that 'is' should not be used for comparing immutables and instead
the equality operator ('==') should be used instead. There is
backwards-compatibility issues with changing this.
Guido pronounced that 'is' ain't changing.
Contributing threads:
- `A proposal has surfaced on comp.lang.python to redefine "is"
<http://mail.python.org/pipermail/python-dev/2004-March/043181.html>`__
- `redefining is
<http://mail.python.org/pipermail/python-dev/2004-March/043222.html>`__
- `(not) redefining is
<http://mail.python.org/pipermail/python-dev/2004-March/043285.html>`__
---------------------------------
Getting PyChecker into the stdlib
---------------------------------
The idea of adding PyChecker_ to the stdlib came up once again. Support
seems to be there but the developers of PyChecker did not speak up.
PyChecker 2 is under development and that changes how PyChecker does
things significantly (analyzes bytecode directly) which might be why
they were mum on the topic.
.. _PyChecker: http://pychecker.sf.net/
-------------------------------
Simplifying logging.basicConfig
-------------------------------
Simplifying basicConfig in the logging package to making logging to a
file simpler was proposed. One person suggested more examples in the
documentation ala unittest. Another person disagreed.
No change has been made at this point nor any specific statement as to
whether any will be.
Contributing threads:
- `Some changes to logging
<http://mail.python.org/pipermail/python-dev/2004-March/043290.html>`__
--------------------------
A new committer amongst us
--------------------------
Phillip J. Eby gained CVS commit privileges to help with development of
Distutils. But Phillip has been active on python-dev for a while so I
am sure he can be put to work on some other things as well. =)
Contributing threads:
- `new Python CVS committer
<http://mail.python.org/pipermail/python-dev/2004-March/043338.html>`__
----------------
Working on HP-UX
----------------
Cameron Laird is still interested in working on the port of Python on
HP-UX. If you are interested in helping out please contact him.
Contributing threads:
- `Portability: update and oblique apology
<http://mail.python.org/pipermail/python-dev/2004-March/043364.html>`__
-------------------------------------------
Binding variables for generator expressions
-------------------------------------------
What would you expect in this situation using generator expressions?::
gen_exps = []
for cnt in range(10):
gen_exps.append(x**2 for x in range(cnt))
If you thought that gen_exps would contain 10 generators that each
return a list longer than the one previous then you like capture binding
for generator expressions (capturing the values of all free variables
used in the generator expression at definition time). If you though
there would be 10 generators that all had the power of 2 from 0 to 9
then you like late binding (using the value of the free variables in the
generator expression at execution time of the generator).
Guido brought this up in his keynote for PyCon_ and said that he
preferred late binding. The reasoning is that there are no surprises in
terms of corner cases and having more obvious values for the free variables.
The point about performance of generator expressions was also brought up
using the now-standard ``sum(x**2 for range(1000))`` example. Using a
list comprehension was actually slightly faster (less than 10%) then the
generator expression. This is partially thanks to Raymond's tweaking of
list comprehensions by adding the LIST_APPEND opcode. The rest is due
to generator expressions creating an actual generator and thus having to
create eval frames and playing with them. But it was pointed out that
if the number passed into 'range' is raised then generator expressions
quickly end up winning because the execution fits in the cache better,
especially if xrange is used.
Contributing threads:
- `An issue recently brought up in patch #872326
<http://mail.python.org/pipermail/python-dev/2004-March/043396.html>`__
- `Possible resolution of generator expression variable...
<http://mail.python.org/pipermail/python-dev/2004-March/043443.html>`__
- `genexps slow?
<http://mail.python.org/pipermail/python-dev/2004-March/043777.html>`__
--------------------------------------------------
More than you ever wanted to know about decorators
--------------------------------------------------
Decorators were the topic for the latter half of March. Initially the
discussion focused on where to put the list of decorators (if Guido's
patch as found at http://www.python.org/sf/926860 is any indication he
has a preference with the decorators coming on the line above the
function/method definition) should go. With C# having a similar
functionality as what is being proposed roughly following C#'s syntax
was considered a good thing, albeit tweaked so that the decorator list
goes on its own line (reason being the LL(1) parser is too dumb to
handle it coming before the 'def' on the same line and it alleviates the
issue of having a long decorator list that would a full line anyway.
With the winning syntax, though, there is the issue of preexisting code
and the work at interpreter prompt. The former is a problem for code
that happens to have a list that is not assigned to anything before a
function definition; why anyone would have a list defined that is not
assigned is beyond me. As for the latter issue, that is a slight
problem. To get around it you can stick the definition in an 'if'
statement::
if True:
[decorate, this]
def marthastewart(): pass
Slight pain, but it has been generally accepted that placing decorators
on their own line is just so much easier to deal with aesthetically this
minor inconvenience has been viewed as acceptable.
After PyCon Guido talked to some people who suggested having another way
of tacking on metadata separate from using descriptors, partially since
C#'s version of decorators is mostly for metadata. But tacking on
attributes to a function can be done using the proposed decorators by
defining some auxiliary function that takes in named arguments that
specify the name of the attribute and the value to set it and returns a
callable that will take in a function and assign the attributes.
This also brought up the discussion of setting function attributes from
within a function since decorators will most likely be used to set
metadata. The idea of having attributes set for the function if a name
starts with '.' was brought up but Guido said he wanted to save that
syntax for within a 'with' block. The other suggestion was to do
``func.attribute`` where "func" is the name of the function is being
defined, but Guido gave that a -1000 vote so that ain't about to happen.
Contributing threads:
- `order of decorator application?
<http://mail.python.org/pipermail/python-dev/2004-March/043411.html>`__
- `PEP 318 - posting draft
<http://mail.python.org/pipermail/python-dev/2004-March/043414.html>`__
- `PEP 318
<http://mail.python.org/pipermail/python-dev/2004-March/043425.html>`__
- `method decorators (PEP 318)
<http://mail.python.org/pipermail/python-dev/2004-March/043528.html>`__
- `PEP 318 and syntax coloring
<http://mail.python.org/pipermail/python-dev/2004-March/043643.html>`__
- `decorators (not transformations)
<http://mail.python.org/pipermail/python-dev/2004-March/043540.html>`__
- `PEP318 metaclass approach
<http://mail.python.org/pipermail/python-dev/2004-March/043589.html>`__
- `method decorators
<http://mail.python.org/pipermail/python-dev/2004-March/043613.html>`__
- `Yet Another Decorator Syntax Suggestion (YADSS)
<http://mail.python.org/pipermail/python-dev/2004-March/043640.html>`__
- `PEP 318: Singleton decorator
<http://mail.python.org/pipermail/python-dev/2004-March/043682.html>`__
- `PEP 318: Preserve function signatures
<http://mail.python.org/pipermail/python-dev/2004-March/043683.html>`__
- `PEP 318: Security use case
<http://mail.python.org/pipermail/python-dev/2004-March/043684.html>`__
- `PEP 318: Decorators last before colon
<http://mail.python.org/pipermail/python-dev/2004-March/043685.html>`__
- `PEP 318: Set attribs with .name = value
<http://mail.python.org/pipermail/python-dev/2004-March/043686.html>`__
- `Re: Python-Dev Digest, Vol 8, Issue 91
<http://mail.python.org/pipermail/python-dev/2004-March/043698.html>`__
---------------------------
Python 2.4 release schedule
---------------------------
If you read `PEP 320`_ you will notice an alpha is currently planned in
July with a possible release in September if the alphas and betas go well.
To see what is planned for this release read the PEP. Looks like some
really cool new additions to Python (under the hood, stdlib, and to
syntax) might make this release.
.. _PEP 320: http://python.org/peps/pep-0320.html
Contributing threads:
- `Timing for Py2.4
<http://mail.python.org/pipermail/python-dev/2004-March/043681.html>`__
------------------------------------------
Cutting down on string creation at startup
------------------------------------------
Martin v. Loewis discovered that Python in CVS created about 12,000
strings while Python 2.2 created 8,000 strings. Martin subsequently
changed 'marshal' so as to share strings that are the same instead of
having to constantly create strings, discover they have been interned,
and then destroy the second copy.
Contributing threads:
- `Python startup time: String objects
<http://mail.python.org/pipermail/python-dev/2004-March/043475.html>`__
----------------------------------
f_tstate going the way of the dodo
----------------------------------
In case you don't catch the meaning of the title, f_tstate is going to
be removed.
Contributing threads:
- `Last chance!
<http://mail.python.org/pipermail/python-dev/2004-March/043594.html>`__
---------------------------------------------------------------
Tentative fix for OpenVMS and its dislike of UNIVERSAL_NEWLINES
---------------------------------------------------------------
See http://www.python.org/sf/903339 for the proposed patch.
Contributing threads:
- ` OpenVMS file system and UNIVERSAL_NEWLINES
<http://mail.python.org/pipermail/python-dev/2004-March/043660.html>`__
----------------------------------------------
The hell that is floating point representation
----------------------------------------------
The discussion came up over the output of ``repr(1.1)``, which is
'1.1000000000000001' (although, apparently, a few years back this was
not the case). The objection was risen that this can surprise people
since repr is what 'marshal' uses for writing .pyc files. But the
counter-argument was that this forces people to deal with the issues
inherent in binary floating point. Plus it makes the value consistent
across platforms if you pass around a .pyc file since the value the
programmer used is explicitly stated. The status quo is staying put.
It was also pointed out that decimal floating point has similar issues
as binary floating point, but at least you get to specify the accuracy
at the cost of speed.
Contributing threads:
- `Expert floats
<http://mail.python.org/pipermail/python-dev/2004-March/043703.html>`__
- `repr(1.1)
<http://mail.python.org/pipermail/python-dev/2004-March/043726.html>`__
----------------------------------------
Relative imports getting a bunch of dots
----------------------------------------
For `PEP 328`_ (which deals with relative imports of modules), Guido
pronounced that he prefers the multiple dots to delineate going up a
level in the directory hierarchy for handling relative imports.
The other big issue with this PEP is backwards-compatibility. Since
this will introduce relative paths, by default all imports that don't
have at least a leading dot for where something is being imported will
be considered absolute. This means that if you want to import something
in the same directory as the module you are importing into you will have
to specify that it is a relative import unless your current directory is
in sys.path . The PEP explains the issues rather well.
.. _PEP 328: htttp://www.python.org/peps/pep-0328.html
Contributing threads:
- `PEP 328 -- relative and multi-line import
<http://mail.python.org/pipermail/python-dev/2004-March/043739.html>`__
More information about the Python-list
mailing list