|
|
|
|
|
by mpolun
2727 days ago
|
|
Rust actually has that they just can't be substituted automatically because they're different types: fn<T: MyTrait> compile_time(thing: &T) {}
fn run_time(thing: &dyn MyTrait) {}
The reason that you can't just substitute them is that you can do more with compile-time generics than runtime ones -- runtime generics have unknown size (different concrete types have different size, so what size is the runtime generic version?) so they always have to be used through a pointer (and usually heap allocated). There are a variety of other restrictions on trait objects (runtime generics) for type-system reasons.It would be possible to find cases where compile time polymorphism is replaced with runtime polymorphism, but I'm not sure it would really gain much given the restrictions. Now if you start changing the language semantics a lot more becomes possible, but I don't even know what changes you would have to make to the language to let that happen. |
|