[Python-Dev] PEP 246, redux

Alex Martelli aleax at aleax.it
Wed Jan 12 16:36:35 CET 2005


On 2005 Jan 12, at 16:12, Phillip J. Eby wrote:

> At 02:27 PM 1/12/05 +0000, Mark Russell wrote:
>> I strongly prefer *not* to have A->B and B->C automatically used to
>> construct A->C.  Explicit is better than implicit, if in doubt don't
>> guess, etc etc.
>>
>> So I'd support:
>>
>>     - As a first cut, no automatic transitive adaptation
>>
>>     - Later, and only if experience shows there's a need for it,
>
> Well, by the experience of the people who use it, there is a need, so 
> it's already "later".  :)  And at least my experience *also* shows 
> that transitive interface inheritance with adaptation is much easier 
> to accidentally screw up than transitive adapter composition -- 
> despite the fact that nobody objects to the former.

A-hem -- I *grumble* about the former (and more generally the fact that 
inheritance is taken as so deucedly *committal*:-).  If it doesn't 
really count as a "complaint" it's only because I doubt I can do 
anything about it and I don't like tilting at windmills.  But, I _DO_ 
remember Microsoft's COM, with inheritance of interface *NOT* implying 
anything whatsoever (except the fact that the inheriting one has all 
the methods of the inherited one with the same signature, w/o having to 
copy and paste, plus of course you can add more) -- I remember that 
idea with fondness, as I do many other features of a components-system 
that, while definitely not without defects, was in many respects a 
definite improvement over the same respects in its successors.

> The other thing that really blows my mind is that the people who 
> object to the idea don't get that transitive interface inheritance can 
> produce the exact same problem, and it's more likely to happen in 
> actual *practice*, than it is in theory.

Believe me, I'm perfectly glad to believe that [a] implied transitivity 
in any form, and [b] hypercommittal inheritance, cause HUGE lots of 
problems; and to take your word that the combination is PARTICULARLY 
bug-prone in practice.  It's just that I doubt I can do anything much 
to help the world avoid that particular blight.

> As for the issue of what should and shouldn't exist in Python, it 
> doesn't really matter; PEP 246 doesn't (and can't!) *prohibit* 
> transitive adaptation.  However, I do strongly object to the spreading 
> of theoretical FUD about a practical, useful technique, much as I 
> would object to people saying that "using significant whitespace is 
> braindead" who had never tried actually using Python.  The theoretical 
> problems with transitive adapter composition are in my experience just 
> as rare as whitespace-eating nanoviruses from outer space.

Well, I'm not going to start real-life work on a big and complicated 
system (the kind where such problems would emerge) relying on a 
technique I'm already dubious about, if I have any say in the matter, 
so of course I'm unlikely to gain much real-life experience -- I'm 
quite content, unless somebody should be willing to pay me adequately 
for my work yet choose to ignore my advice in the matter;-), to rely on 
imperfect analogies with other experiences based on other kinds of 
unwanted and unwarranted but uncontrollable and unstoppable 
applications of transitivity by underlying systems and frameworks.

I already know -- you told us so -- that if I had transitivity as you 
wish it (uncontrollable, unstoppable, always-on) I could not any more 
write and register a perfectly reasonable adapter which fills in with a 
NULL an optional field in the adapted-to interface, without facing 
undetected degradation of information quality by that adapter being 
invisibly, uncontrollably chained up with another -- no error message, 
no nothing, no way to stop this -- just because a direct adapter wasn't 
correctly written and registered.  Just this "detail", for me, is 
reason enough to avoid using any framework that imposes such 
noncontrollable transitivity, if I possibly can.


Alex



More information about the Python-Dev mailing list