[Python-3000] pep 3124 plans
Talin
talin at acm.org
Sat Jul 21 20:04:55 CEST 2007
Joe Smith wrote:
> The effects of this can be wonderful. A package could convert some of a
> frameworks functions to generics, to allow them to handle the new objects
> the package provides. It might also need to add some before and after
> methods to ensure that the user of the module, it looks like the framework
> was designed to support the module in question, when in fact, it was not.
> The idea being the package can basically make the needed changes so that
> everything just works. All without having to duplicate any code from the
> framework itself.
> See the benefits? (The framework mentioned could be a major framework like
> ZOPE, just an average package, or even a simple module.)
When considering the decision to include a new feature into the
language, one has to consider the costs as well as the benefits. You've
made an impassioned argument showing all the wonderful power and
expressiveness of these various features. However, power and
expressiveness are not the only factors that should be considered.
To give an analogy, think back 20-25 years ago, when there was still a
vocal contingent of programmers who were in favor of self-modifying
assembly code. Expert hackers would show the amazing power of this
technique, all of the wonderfully clever tricks that you could accomplish.
(I remember this because I was writing games back them, and
self-modifying code was the only way you could write 6502 assembly code
that was actually efficient. Since the 6502 had no 16-bit index
registers, the only way to have efficient arrays larger than 256 bytes
was to calculate the address and then modify the 16-bit address field of
the subsequent instruction.)
At the same time, however, this clever technique came at a cost:
Programs that were very difficult to debug or even understand. Many
people spoke out against it, and for a time it seemed that the technique
was a dying art.
Today we have the best of both worlds: We still have self-modifying
code, but nowadays we call it JIT: Just-In-Time compilation. Instead of
a free-for-all where a programmer can modify any arbitrary memory
address, instead the power of run-time code generation is safely
sandboxed inside of a JIT compiler component that is very competent at
hiding the grisly details from the programmer.
Now, don't think that I am directly comparing method combination to
self-modifying assembly code. I'm not saying that such things are
inherently dangerous and should be avoided.
Rather, what I am trying to point out is the *thought process* that
should be applied to any new feature.
Python is a "small" language in the sense that it's easy to hold the
entire syntax in your head, and lots of people want to keep it that way.
This does not mean that we can't move forward with new features. But it
means that each feature needs to be judged and weighed as to how much it
affects that "mental smallness" of the language.
Generic functions are favored because they have the potential to
*shrink* certain kinds of problems. I don't mean in the sense of
requiring the programmer to type less keystrokes, but in the sense of
shrinking how much brainpower it takes to think about the problem.
But even then it took Guido several months (according to a posting he
made some time ago) of thinking about generics before he reached his
"Aha" moment with regards to completely grokking the concept. This focus
on practicality rather than rocket science is exactly why Guido's a good
gatekeeper in these matters - if he doesn't understand it why it's
important or useful, it probably means that lots of other Python
developers won't either.
-- Talin
More information about the Python-3000
mailing list