#constructor #static #ctor #init #main #proc-macro

已删除 启动程序

在 main 之前运行一些代码的轻量级方法(无依赖,无 proc macro)

0.1.1 2021年2月2日
0.1.0 2021年2月2日
0.0.1 2021年2月2日

#5 in #ctor

Apache-2.0 OR MIT OR Zlib

10KB
85

startup: 在 "main" 之前运行 Rust 代码

Build Status Docs Latest Version Minimum Rust Version

在 main 之前运行一些代码的轻量级方法(无依赖,无 proc macro)。这类似于 GNU C 扩展 __attribute__((constructor)),或者 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");
}

打印

I'm running before main.
I'm inside main.

ctor 的比较

此软件包与 ctor 软件包在道德上是等价的,尽管 API 完全不同。存在的主要原因如下

  • 编译速度更快——没有 proc macros / syn / quote。
  • 更明显地安全。不支持静态上的 #[ctor],没有 #[dtor] 相当物,并避免了我过去在 ctor 上提交的一些问题...
  • 通过假定它们至少支持 .ctors 部分,来处理未经测试的 Unix 平台。这与 clang 在编译 C++ 静态构造函数时的行为一致。这意味着我们应该期待更好的平台支持。

无运行时依赖