3 ms·
Unless you use `dyn`, all code is monomorphized, and that code on its own will get optimized. This does come with code-bloat. So the Rust std sometimes exposes
by OptionOfT 9mo ago
Unless you use `dyn`, all code is monomorphized, and that code on its own will get optimized.
This does come with code-bloat. So the Rust std sometimes exposes a generic function (which gets monomorphized), but internally passes it off to a non-generic function.
This to avoid that the underlying code gets monomorphized.
https://github.com/rust-lang/rust/blob/8c52f735abd1af9a73941b78fe7ed2ab08b9c0dd/library/std/src/path.rs#L2695-L2707 https://github.com/rust-lang/rust/blob/8c52f735abd1af9a73941...
- dwattttt 9mo ago> This does come with code-bloat. So the Rust std sometimes exposes a generic function (which gets monomorphized), but internally passes it off to a non-generic function. There's no free lunch here. Reducing the amount of code that's monomorphised reduces the code emitted & improves compile times, but it reduces the scope of the code that's exposed to the input type, which reduces optimisation opportunities.
- josephg 9mo agoYes. But I like that rust gives you the option. In C, the only way to write a monomorphized hash table or array list involves horribly ugly macros that are difficult to write and debug. Rust does monomorphization by default, but you can also use &dyn trait for vtable-like behaviour if you prefer.
- bonzini 9mo agoThere is also the "momo" crate to do the same with a procedural macro attribute (https://docs.rs/momo/latest/momo/ https://docs.rs/momo/latest/momo/).