generics variant dialect vectorization virtual extern ad-hoc polymorphism optional dialecting multiversioning