Sorry for a late reply, but I’m afraid that you may be wrong. The problem (in fact the post itself has a similar problem) is the insufficient understanding of polymorphism. Let me put it simple:
- There are many types of polymorphism. Most notably, ad hoc polymorphism (function overloading), parametric polymorphism (can be achieved by templates) and subtyping (multiple dispatch in Julia, single dispatch through function overriding in C++).
- The post made the error that it didn’t differentiate ad hoc polymorphism from subtyping.
- bgroenks correctly described how these two are different.
- You made the error that you didn’t differentiate parametric polymorphism from ad hoc polymorphism (they are both compile-time polymorphism).
Even simpler:
- Static loading is definitely not the same thing as static type solution. The former only contains ad hoc polymorphism, while the latter also contains parametric polymorphism, as templates you have mentioned.
- The post is about the difference between static loading and multiple dispatch, it certainly has nothing to do with templates.
- bgroenks correctly described how static loading and multiple dispatch are different. There are no false claims.
Besides, some languages, most notably C++, have their own definition of polymorphism, which is usually a subset of the polymorphism described above. But I believe it will be beneficial to have a gerenal understanding.