3 ms·
I'm not precise anymore with jargon concerning polymorphism (it's all the same to me), which I probably shouldn't do. I consider two factors: first closed/open
by rrobukef 9y ago
I'm not precise anymore with jargon concerning polymorphism (it's all the same to me), which I probably shouldn't do. I consider two factors: first closed/open (or finite/arbitrary) of 'remembering' an erased type, and second the sugar for nested 'remembering'. Almost all languages have both (open and closed) as either built-in, as a library or as a design pattern for that language. It boils down to either a tagged union or a function pointer. And both can be transformed to the other if needed.
Assembly, C have tagged unions & function pointers.
Java has visitors, instanceOf, reflection.
C++ has visitors, boost::variant, dynamic casts, mach7.
Haskell has ADTs, pattern matching, existential quantification, Dynamic.
Rust has pattern matching, traits, Any.
Python, javascript, lua, lisp are dynamic, it's easy enough to create both.