Hi Stefan,
I can think of two additional things to mention besides the other comments that were already made above:
Allowing people to change the dispatch/call code may allow non-compiler developers to try and implement functional language-like features in a library setting: for example, pattern matching.
Even as an experimental playground - before proposing them to be properly integrated into the language - such a facility may be useful.
The second comment is about the function becoming “irrelevant”. Depending on your point of view, this may or may not be a valid argument. In any programming language, I can already lie:
def i_promise_i_do_foo():
return do_bar() #Haha, I lied!
In some sense, conceptually, I don’t really see the difference between
+(a, b) = explode_computer()
and
call(f, a, b) = explode_computer() #f completely ignored
Personally, I don’t feel strongly about this topic. I have, a number of times in my career, needed a similar facility, but that may have been a result of other missing features of the languages I was working with at the time.
It may be worthwhile putting this on a “wish list” to be considered later. It is likely to be a better choice to stay conservative for now. I can’t think anything that would break if in the future, the call dispatch mechanism is modified to become more general.
Kind regards,
Tom