Tiny (no dependency, no proc macro) way to run some code before main. This is similar to the GNU C extension __attribute__((constructor))
, or the behavior of static constructors from C++.
startup::on_startup! {
// Note: not all of the rust stdlib may be supported before main.
println!("I'm running before main");
}
fn main() {
println!("I'm inside main");
}
Prints:
I'm running before main.
I'm inside main.
This crate is the moral equivalent to the ctor
crate, although the API is completely different. The main reasons for it's existence are:
- Much faster to compile — no proc macros / syn / quote.
- More obviously safe. No support for
#[ctor]
on statics, no#[dtor]
equivalent, and avoids a number of issues I filed withctor
in the past... - Handle untested unix platforms by assuming they support at least the
.ctors
section. This is in line with what clang seems to do when compiling C++ static constructors. This means we should expect to have better platform support.