Keep your compile time during MOnoMOrphization
This is a proc_macro
crate to help keeping the code footprint of
generic methods in check. Often, generics are used in libraries to
improve ergonomics. However, this has a cost in compile time and
binary size. Optimally, one creates a small shell function that
does the generic conversions and then calls an inner function, but
that makes the code less readable.
Add a #[momo]
annotation from this crate to split your function
into an outer conversion and a private inner function. In return,
you get some compile time for a tiny bit of runtime (if at all) –
without impairing readability.
Conversions currently supported are Into
(.into()
), AsRef
(.as_ref()
), and AsMut
(.as_mut()
). See enum Conversions
in code.
This new updated version uses D. Tolnay's [watt] runtime to speed up the compile time, which was negatively affected with proc macro baggage.
The main crate uses a pre-built wasm containing the tagged version. Rebuilding the wasm can be done with the commands:
```bash cd wasm cargo build --release --target wasm32-unknown-unknown
wasm-opt target/wasm32-unknown-unknown/release/momo_watt.wasm -Oz \ --strip-debug --simplify-globals --vacuum -o ../src/momo.wasm ```
You might need to add the wasm32-unknown-unknown
target to your
Rust toolchain.
(If you are tagging a new version, remember to commit the new wasm
file.
Also change the versions in both Cargo.toml
files.)
The [cargo-expand] tool may be used to expand the output of macro expansion,
including from this proc-macro. To examine the results of the example file,
use cargo expand --example check
.