[Python-Dev] Proposal to revert r54204 (splitext change)
glyph at divmod.com
glyph at divmod.com
Thu Mar 15 22:46:17 CET 2007
On 08:43 pm, jeremy at alum.mit.edu wrote:
>On 3/15/07, glyph at divmod.com <glyph at divmod.com> wrote:
>>On 05:51 pm, pje at telecommunity.com wrote:
>> >At 07:45 AM 3/15/2007 +0100, Martin v. Löwis wrote:
>> >>I apparently took the same position that you now take back then,
>> >>whereas I'm now leaning towards (or going beyond) the position
>> >>Tim had back then, who wrote "BTW, if it *weren't* for the code
>>breakage,
>> >>I'd be in favor of doing this."
>> >
>> >If it weren't for the code breakage, I'd be in favor too. That's not
>>the
>> >point.
>> >
>> >The point is that how can Python be stable as a language if
>>precedents can
>> >be reversed without a migration plan, just because somebody changes
>>their
>> >mind? In another five years, will you change your mind again, and
>>decide
>> >to put this back the way it was?
>>
>>Hear, hear. Python is _not_ stable as a language. I have Java
>>programs
>>that I wrote almost ten years ago which still run perfectly on the
>>latest
>>runtime. There is python software I wrote two years ago which doesn't
>>work
>>right on 2.5, and some of the Python stuff contemporary with that Java
>>code
>>won't even import.
>
>I think the problem has less to do with bug fixing than with lack of
>any clear specifications or documentation about what developers can
>depend on. You could probably make a case that any change that
>doesn't fix a crash bug is likely to cause some particular program to
>behave differently.
Absolutely. One of the reasons I'm working on documenting this process
is that, of course, *everything* can't be made compatible. The mere act
of adding a function or module adds a detectable change in behavior that
some program *might* insanely depend on.
A clear understanding of what is meant by "backwards compatibility" is
equally important to developers trying to future-proof their code as it
is to those trying to make sure they don't break code which has been
future-proofed. This is a form of social contract, and both sides need
to know about it.
>Take bug 1504333 which lead to a change in sgmllib behavior for angle
>brackets in quoted attribute values. Did the sgmllib documentation
>explain that the fixed behavior was incorrect? Might a programmer
>working with sgmllib have written code that depended on this bug? Do
>you object to this bug fix?
I don't know enough about the specification to say for sure, but I
suspect that it is a legitimate bug fix, because sgmllib is implementing
an externally-determined spec. In cases where the spec is flagrantly
violated, it seems like it should be fixed to adhere to it.
>For many of these bugs, some people will have written code against the
>documentation and some people against the implementation or behavior.
>(In this case, the documentation is vague or conflicting.) I don't
>think I know how to balance the important of these two classes of
>users. Some code is going to break the first time they run into the
>under-specific edge case, some code is going to break when the
>specification and implementation are clarified. You have to weigh
>which you think is more likely and which will benefit users the most.
If the documentation is vague and conflicting, then it seems likely that
a parsing option could be added. I am not advocating perfect, 100%
backwards compatibility, merely some standards for what happens when a
(potentially) incompatible change is made. For example, you could add a
flag to the parser which tweaks the treatment of quoted angle brackets,
and warn if the argument is not passed that the default will change in
the future (or, better yet, that the argument will be required in the
future). Or, you could provide a separate name for invoking the
different behavior.
>I think everyone wants to do the "right thing" by Python's users, but
>it's not clear what that right thing is.
I really think that starting with the "golden rule" would be a good
idea. Would Python core developers mind if something analogous in the C
runtime changed? How would they cope with it? What kind of feedback
would you expect the C compiler or runtime to provide in such a case?
Python should do unto others, etc.
>Could you point out a few such programs that people on python-dev can
>look at? I think it would be useful to gather some data about the
>kind of migration pains real users are having. I believe Martin and
>others are trying to do the right thing. Real data is more likely to
>convince them than passionate arguments on python-dev.
(I assume you're responding to my other comment about my programs not
running, even though that's not what you quoted.)
I don't think these programs would contribute much to the discussion.
I've probably got them archived somewhere, but they were broken circa
2.3 and I don't think I've run them since. I doubt they would make any
sense to anyone here, and we would all get into a heated debate as to
whether my usage of Python was valid or not (hint: it was *REALLY*
gross).
In fact, let's back up a step. These programs were never released as
open-source. Pretend for a moment that it is beyond my power to reveal
the highly proprietary for loops and if statements contained therein to
the general public. Why should python-dev get to see my source code?
Microsoft doesn't have access to millions of enterprises' code all over
the world, and yet, they manage to provide a (relatively) stable
platform for developing such code. The Mozilla foundation doesn't
receive sources from Adobe, but the flash plugin manages to run on their
browser for years at a time with no change. Sun does not require IBM
reveal their source code to keep WebSphere working with new releases of
Java. When was the last time you needed to approach the Linux kernel
mailing list with some of your code to discuss their rapid evolution
which was breaking all your applications?
I am sympathetic to the Python team's desire to evolve and collaborate
with the community, so I am overstating the case a bit here. I think
that this experiment in a platform that actually has meaningful changes
and deprecations going on that require developer participation is
interesting, and probably the way that all software will eventually be
moving.
My point is that Python is going to be operating at a massive
disadvantage to other languages and environments by being a living,
dynamic, evolving environment in the first place. To combat that, it
needs to be as conservative as possible about the types of change that
are accepted. The process of evolution needs to be tightly managed, and
very good, highly explicit channels of communication are necessary in
the code, on the website, in the releases, on the mailing lists, and so
on.
I keep hearing the "NEWS" file bandied about as the solution here, and
that isn't going to cut it. The change that caused the most angst to
fix in Twisted for Python 2.5 was buried on line 751 of the NEWS file,
in the "what's new" for one of the betas. We discovered it because of
our test coverage, we would never have found it in the NEWS file.
There were HUNDREDS of other issues in that file, many of which have
absolutely no observable effect on the semantics of _any_ working python
program, like minor fixes for obvious bugs like memory-management
issues. These are mixed in with no prioritization amongst and zingers
like new-style exceptions and id()'s return value changing.
Of course, there is *some* code I can disclose. Have a look here:
http://twistedmatrix.com/trac/ticket/1842#comment:5
Migrating Twisted from Python *2.4* to *2.5* took over a week, and
several people. There were 10 separate issues that needed to be fixed.
This is very recent, very active code, that had already had some
preparation from a few people following beta releases, not some gnarly
old legacy application.
>I think you missed the point here. The hypothetical question was not
>about any particular majority, but rather that regardless of which
>group you poll, the majority decision may not be the right one. Even
>a majority of Twised users :-).
Erm... perhaps I was insufficiently clear. My comments there were that
this is yet another example of letting muddy thinking and vague feelings
drive the development process. If the development process were
democratic (and let me be crystal clear, I think that democratic
development is a _VERY BAD_ idea) then at least it would be an explicit
process, not just one guy thinking that maybe a lot of people like a
particular change.
>>According to that highly scientific study, at this point in time,
>>"Nobody
>>disagrees" :). (One in favor, zero against.)
(And *this* was just a joke...)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-dev/attachments/20070315/0e5abe6d/attachment-0001.htm
More information about the Python-Dev
mailing list