Apparently you do know what dynamic dispatch is, you're just wrong that it can't be type checked.
In Java, say you have an interface called `Foo` with a method `String foo()`, and two classes A and B that implement that method. Then you can write this code (apologies if the syntax isn't quite right, it's been a while since I've written Java):
Foo foo = null;
if (random_boolean()) {
foo = new A();
} else {
foo = new B();
}
// This uses dynamic dispatch
System.out.println(foo.foo())
This uses dynamic dispatch, but it is statically type checked. If you change A's `foo()` method to return an integer instead of a String, while still declaring that A implements the Foo interface, you will get a type error, at compile time.Because the implementation details of Foo are actually know at compile time. Which is why you are able to type-check it.
You have literally declared all allowed (but not all possible) implementations of Foo.
What happens when Foo() is a remote/network call?
I thought you were just mistaken about something, but no, instead you've redefined a well understood term without telling anyone, then aggressively refused to clarify what you meant by it and argued for hours with people, while saying they were all wrong when they used the well established term to mean its well established meaning.
The thing you're talking about is an interesting concept, but it's not called dynamic dispatch, and you will confuse everyone you talk to if you call it that. I don't know if there's a term for it.
According to who?
Computer scientists talk about “well formed” not “well established”.
Those are categorical definitions.
Wikipedia, every textbook you can find, the top dozen search results for "dynamic dispatch", me who has a PhD in computer science plus all the other CS PhD people I know, everyone in my office who knows the term (who are industry people, not academia people), every blog post I have ever read that uses the term, and all the other HN commenters except you. I'm really not exaggerating; a lot of CS terms have disputed meanings but not this one.
EDIT: Sorry all for engaging the troll. I thought there might have been some legitimate confusion. My bad.
What I am talking about when I say "dynamic dispatch" is the sort of dispatching done by R, LISP and Julia (and not by C++ or Java). Now, we can bicker about labels and you can insist that it's actually called "multiple dispatch" and not "dynamic dispatch", but you can't bicker about the semantic fact that "multiple dispatch" is actually more dynamic than "dynamic dispatch".
And this semantic point would've been trivial to unpack if you weren't try to win an argument.
Indeed, sorry for engaging the trolls. 20; or 30 of you. Lost count.
Oh, that's recursive! Which is Computer Science's domain of expertise, not the public domain.
We are talking about formal semantics here. What do programs (and computer languages are themselves programs) mean?
Point 0 of Wadler's law.
https://en.wikipedia.org/wiki/Semantics_(computer_science)
If you can type-check it at compile time then it is NOT dynamic dispatch. It's a contextual confusion.
0. Dynamic dispatch (as you are using it) 1. Double dispatch 2. Multiple dispatch 3. Predicate dispatch 4. All of the above collectively.
What you thought was a confusing re-definition on my part might have been an ignorance of alternative uses on yours ;)
Java doesn't do 1, 2 or 3.
If you can type-check your dispatcher at compile time then there is nothing dynamic about it.
Decidable (ahead of time) means your function is fully determined. Something that is fully determined is not dynamic.
It is the conception computer scientists use.
Trivially, because you don’t have this knowledge (and therefore you can’t encode it into your type system) at compile time.