
On Sat, 16 Apr 2022 at 14:25, Steven D'Aprano <steve@pearwood.info> wrote:
On Sat, Apr 16, 2022 at 11:07:00AM +1000, Chris Angelico wrote:
On Sat, 16 Apr 2022 at 11:00, Steven D'Aprano <steve@pearwood.info> wrote:
and therefore would become the only thing that offers "full MI", displacing other languages. It's a meaningless concept, unless there is some form of absolute completeness that can be attained
Well duh Chris, sometimes I wonder if you read my posts before jumping in to disagree with me, that is *exactly* what I am arguing.
You placed a LOT of caveats on it. I don't count that as "absolute completeness". It is the most complete that YOU, right now, think could ever be possible.
Which conditions would you drop? There's not that many, really. Five. Six if you include the "no cycles" requirement for the DAG, which I think is so obviously necessary that it is barely worth mentioning.
This is *exactly* the "no true Scotsman" fallacy: you have already excluded from consideration anything that drops a condition you didn't already drop. On the assumption that your five conditions are essential, there's no way that you can drop any of the five conditions and still have it count, therefore the five conditions are essential. Your logic is circular. It is highly arrogant to assume that nobody will ever find a way to implement MI while dropping one of your conditions. They're not fundamental to the definition, they're fundamental to *the way Python does things*.
The most subjective is the requirement for automatic conflict resolution. It is a legitimate design choice to give up automatic conflict resolution (that's what C++ and Eiffel do) but that would be a breaking change for Python.
Yes. A breaking change FOR PYTHON.
So come on Chris, back up your disagreement with something objective, not just wishy-washy "anything might happen in the future!" nonsense.
Yet you're willing to argue that other languages don't do "full MI" because they do things that would be a breaking change for Python?
No, not everything is possible. We're never going to discover a new odd number between 3 and 5, or that 7 isn't really prime, or that cats are actually a type of plant, or that Australia doesn't exist.
You would be very surprised what people HAVE discovered. For instance, it's very common to define the distance between two numbers by subtracting one from the other, but that isn't the only internally-consistent definition of distance that could be used. The only things that we can completely rule out are those which are true by definition, or can be proven mathematically or logically. A new odd number between 3 and 5 is provably impossible. 7 is truly prime, by the definition of primes, and any extension to that definition (eg complex primes or Gaussian integers) must maintain that. Discovering that Australia doesn't exist would be world news, but might indicate that we'd finally angered some nuclear country enough to get ourselves completely blown off the map. (Yeah, I know countries like Russia and the US don't have enough nukes to do that, but we have no idea what sort of arsenal Ghandi is hiding, just waiting for his stats to become negative...)
So be concrete: which of my preconditions do you want to challenge?
- The inheritance model automatically resolves conflicts.
As I said, it is a legitimate design choice to give that up, but it would be a breaking change for Python so we can rule it out.
In any case, languages without automatic conflict resolution do less than languages with them. (That might be a good thing.)
This is the essence of the "no true Scotsman" fallacy: you assume that it's not true MI without automatic conflict resolution.
- The MRO is entirely dependendent on the shape of the inheritance graph, and not on incidental properties like the name of classes.
Let's hear your justification for why breaking that condition is good.
"I changed my class name from Spam to Eggs, and suddenly the inheritance relationships between my classes changed."
"That's not a bug, that's a feature!!!"
Is it not true MI if the relationships change? Is that what you're saying? What is "full MI"?
- the inheritance model is consistent, monotonic and preserves local precedence order (C3 linearization).
Which of those three will you give up, and why is that a good thing?
"In my class Spam, superclass A takes precedence over B, but when I subclass Spam, the precedence swaps and B comes before A."
"That's not a bug, that's a feature!!!"
You keep asserting that, because something OBVIOUSLY would be a bad thing for Python, it must not be "true multiple inheritance". That's why you're being called out for the NTS fallacy. Your entire definition of "full MI" is "Python 2.3+".
If you exclude models of MI which are logically incoherent and inconsistent, (such as Python's prior to version 2.3), then Python's model of MI is objectively as complete as you can get.
If you assume that what we know in 2022 is the most we will ever know, then yes, you would be correct. Do you really think that nobody will ever learn anything new about ways of doing MI?
Yes. Its a DAG of superclass/subclass relationships. There is only one way to draw that graph that is coherent.
Can you mathematically prove that? What if there is some other way to linearize that is *also* consistent with itself, but different from C3? Is there some way to prove that this is impossible? Also, what if there is no linearization as such - what if, when you call the superclass, it actually calls ALL the parents, not just one?
I don't know whether you're mistaken or utterly arrogant.
Do you think they are the only two choices? Are you such a contrarian that you refuse to even consider that I might be right?
You see the problem of the excluded middle now. Can you recognize when you're making it yourself? ChrisA