In my example, B
isn’t calling A.start
directly, it is calling Base.sum
, and Base.sum
(which knows nothing about A or B) is calling Base.start
(which now needs to call A’s version if you want sum
to be generic). As @yuyichao says, the only way to make this kind of thing work is if Base.sum
“knows” about all start
methods including A.start
, which leads you back to essentially the current dispatch rules.
You are proposing vast changes in the language on the eve of Julia 1.0. There was just a long thread explaining why a closely related proposal is unworkable. We’ve told you that such changes are not needed to enable static compilation in the future, and that in fact static compilation has already been proved to work in other languages with similar generic-function semantics (and already happens in the Julia sysimg). You haven’t worked through even an example as simple as Base.sum
— and despite decades of study on the semantics of generic functions in multiple-dispatch languages, you haven’t pointed to any work that models the semantics that you want. You begin the thread by suggesting that we don’t currently take dispatch “seriously.” Is it so surprising that we don’t want to spend a lot of time debating you, trying to convert your proposal into a concrete algorithm and arguing its weak points?
By “armchair design” I’m referring to the practice of suggesting far-reaching changes and asking others to work out the details and the implementation. This is rarely successful.