7 ms·
The point is trivial. You can’t have both static type safety AND dynamic dispatch at the same time and in the same context about the same data. Choose one. Gi
by ukj 5y ago
The point is trivial.
You can’t have both static type safety AND dynamic dispatch at the same time and in the same context about the same data.
Choose one. Give up the other. Make a conscious trade off.
The language that you are using is making such trade offs for you - they are implicit in the language design. Best you know what they are because they are meaningful in principle and in practice.
- justinpombrio 5y agoJava has both static type safety AND dynamic dispatch at the same time and in the same context about the same data.
- ukj 5y agoNo, it doesn’t. The input-data to the compiler can’t be handled by the JVM and vice versa. The JVM handles byte code as input. The compiler handles source code as input. That is two different functions with two different data domains. They literally have different types! Which one of the two functions is the thing you call “Java”?
- justinpombrio 5y agoA type system is sound when: for all expressions e: if e type checks with type t, then one of the following holds: - e evaluates to a value v of type t; or - e does not halt; or - e hits an "unavoidable error" like division by 0 or null deref (what counts as "unavoidable" varies from lang to lang) Notice anything interesting about this definition? It uses the word "evaluate"! Type soundness is not just a statement about the type checker. It relates type checking to run time (and thus to compilation too). That is, if you muck with Java's runtime or compiler, you can break type soundness, even if you don't change its type system in the slightest.
- ukj 5y agoYes this is precisely what I am talking about. Different implementations of eval() a.k.a different programming languages have different semantics. Which implicit eval() implementation does the above hold? What type system do you have in mind such that the above holds for ALL expressions. Type-checking itself is not always decidable.
- BoiledCabbage 5y agoIt's pretty clear at this point you don't understand what dynamic dispatch means. I don't think it's worthwhile for anyone else to argue with you further. C++ and Java both support dynamic dispatch although you deny it. You've taken up almost a full page of HN arguing with everyone trying to explain it to you. People have pointed you to wikipedia showing you that you're wrong. [1] ISOCPP of which Bjarne is a director [2] says that C++ supports dynamic dispatch. [3] And you continue to attempt to argue that everyone on HN, Wikipedia and the creator of the C++ language are all wrong and don't know what dynamic dispatch is. Your continued insistence is both wrong and a negative impact at this point on hn. Please stop arguing something that numerous people have taken lots of patience and charity in trying every way possible to explain to you and what is clearly factually wrong. If you're going to reply, please explain why an organization that Bjarne Stroustrup is a director of believes that C++ supports dynamic dispatch. 1. https://en.wikipedia.org/wiki/Dynamic_dispatch#C++_implementation https://en.wikipedia.org/wiki/Dynamic_dispatch#C++_implement... 2 https://isocpp.org/about https://isocpp.org/about 3. https://isocpp.org/wiki/faq/big-picture#why-use-oo https://isocpp.org/wiki/faq/big-picture#why-use-oo
- ukj 5y agoIt is pretty clear at this point that you don’t know what “meaning” is when it relates to the semantics of formal languages. For starters you don’t even understand Rice’s theorem. Sadly this isn’t on Wikipedia. You actually have to dive deep on the Topological, Categorical and Logical view of computation.
- ukj 5y ago>If you're going to reply, please explain why an organization that Bjarne Stroustrup is a director of believes that C++ supports dynamic dispatch. Because the meaning of "dynamic" is ambigous! Since you are pointing me to wikipedia I'll point you right back... https://en.wikipedia.org/wiki/Virtual_method_table#Comparison_with_alternatives https://en.wikipedia.org/wiki/Virtual_method_table#Compariso... "Virtual method tables also only work if dispatching is constrained to a known set of methods, so they can be placed in a simple array built at compile time." If the vtable is generated at compile and is constrained to a known set of methods then that array is immutable! Calling that "dynamic" is an obvious misnomer! You are neither charitable nor patient. You are committing the bandwagon fallacy as we speak. You and the other 120 (and counting) angry downvoters ;) I am using the word "dynamic" to actually mean dynamic! I am not going to define it. Use your judgment. Dynamic is NOT static. I am not asking you to "educate me", or to tell me I am right; or wrong. I am asking you to understand the sort of programming language design I have in mind! Either you understand; or you don't.