[bt-devel] Compatibility break: Sword 1.6RC1->RC2 API change

Manfred Bergmann manfred.bergmann at gmx.net
Fri Apr 24 00:27:15 MST 2009


Am 24.04.2009 um 07:31 schrieb Eeli Kaikkonen:

> Quoting "Troy A. Griffitts" <scribe at crosswire.org>:
>
>> Thanks for the support and I understand the criticisms.  Let me just
>> say that the one difference here is that we are talking about a 1.6.x
>> BRANCH in which NO API changes can be made once it happens.  It is  
>> this
>> point that is weighing heavier on the decision to make the change  
>> right
>> now before the branch.  Honestly, I'd rather have the interface  
>> where I
>> want it right now over stability (obviously I'd like both).  Once  
>> 1.6.x
>> is branched, I have no problems releasing monthly if we feel the  
>> need,
>> but it will likely be another year before we branch again and get
>> interface changes out in the wild.  Hope this helps explain the
>> decision.
>
> It is understandable. We also have to remember that the situation  
> here is quite rare and Troy (or others) didn't have much experience  
> on releasing such an important milestone as 1.6 is. We have to learn  
> from this and not repeat some mistakes.
>
> A library is much more critical than an application. We can release  
> apps just like that, changing whatever, and it may temporarily  
> affect few users. But if there are 5 frontends using a library, a  
> change may affect 5*n developers and 5*m end users. If the app  
> architecture is rigid, one small API change may ruin the whole thing.
>
> It is usual practice to mark some API features deprecated. It could  
> have been done here, too. Better yet, why not let the setter  
> function be (at the moment, put it back). It was there only for a  
> short moment, but in this situation it allowed frontend developers  
> continue with old architecture. If it's important to make sure that  
> the developers understand what they are doing, why not rename the  
> setter as  
> "iSwearToMyHeadThatIHaveShownAWarningToUserAndUnderstandThatPeoplesLifesMayDependOnIt 
> (bool)"
> It still changes the API but doesn't force to subclass. The virtual  
> method and this setter can live peacefully together: the default  
> implementation of the checker would return either the value set by  
> this setter or false.

Yeah. I vote for putting the setter back.
If someone doesn't want to show a requester he can still get around it  
it probably is harder with the virtual method.
On the other hand if someone takes it serious he shows the requester.  
(Btw: MacSword does, too, since a couple of months when this setter  
was intruduced.)


Manfred



More information about the bt-devel mailing list