That's one of the cool things about Julia. If it can prove the types of the arguments to a function, or at least reduce them to a small set. It can do the dispatch at compile time.
Well, Julia has better than semi decent support for generics, since every function is by definition a generic.
That's an advantage versus other dynamic languages without multiple dispatch, but statically typed languages do not have this issue in the first place. The only other dynamic language used for numerical stuff is Python, but its issues go well beyond lack of MD.
MD can be useful for static languages of course, but it comes up significantly less often and static MD is simply overloading/ad-hoc polymorphism.
Any language with semi-decent support for generic programming (via traits, type classes, overloading, what have you) should be able to do the above.