At some point in the future, it's going to become important to accurately determine whether a public API is incompatibly changing. This is a type of subtle, incompatible change to an API that we should all know about. Making this type of change in a compatible way depends on having the parameters that are passed into the interface correctly defined, e.g., requiring that the argument be derived from some base class so that when a new method is added to the base class, it has some reasonable default behavior rather than raising an exception.

Would you like me to write a program that uses only ImageInterface (without using ProgressTracker at all) that works before your change but breaks with a NotImplementedError after the change? Would that convince you that this really is an incompatible change to ImageInterface?

All I'm looking for is that we acknowledge that this really is an incompatible change to ImageInterface. We have to acknowledge incompatible changes if we are to avoid them in the future.

Thanks.
Tom


Shawn Walker wrote:
Tom Mueller wrote:
...
However, I still maintain that this change is an incompatible change to the ImageInterface interface. (I'm just calling a spade a spade.) For example, if you had a class:
...
Here, I haven't said anything about what the type of the a object actually has to be, and with Python, there actually isn't any requirement that object passed in to __init__ have any particular type, as long as it implements the right methods.

This is exactly what is happening with the ImageInterface class with this change. This isn't about whether ProgressTracker is public or not. It is about what is happening to ImageInterface.

Now if all of ImageInterface isn't considered "public", specifically the 3rd parameter of the __init__ method, then I stand corrected. But at this point, I thought that all of ImageInterface was supposed to be "public".

I think we're just arguing semantics at this time.

All of *ImageInterface* is public, but progresstracker is not part of ImageInterface.

The main points here are that:

* the public client API has never documented what it expects for a progresstracker object and has always had a loosely coupled relationship with it

* changes to the progresstracker object currently do not cause a change in API version

* changes to the progresstracker object are not documented as they are for pkg.client.api

* the docstring in the progresstracker class only says that subclasses must implement all output methods, but doesn't say why or how, or anything about versioning, etc.

So even if we were to agree that the public client API was incompatibly changing (which I do not), it doesn't matter as changes to progresstracker are not currently documented nor considered part of the public client API.

I realise the argument you're making is that the usage of the tracker object provided by clients by pkg.client.api is incompatibly changing, but I can't do anything about that. That's what the new bug I'm opening to resolve this is about.

I'm not certain what you want me to do here or what the point of all of this is.

Cheers,

begin:vcard
fn:Tom Mueller
n:Mueller;Tom
org:Sun Microsystems, Inc.;SWI Install/Update Software
adr:;;21915 Hillandale Dr;Elkhorn;NE;68022;USA
email;internet:[email protected]
title:Senior Staff Engineer
tel;work:877-250-4011
tel;fax:877-250-4011
tel;home:402-916-9943
x-mozilla-html:TRUE
version:2.1
end:vcard

_______________________________________________
pkg-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/pkg-discuss

Reply via email to