如果"货物构建"比直接运行rustc慢,我为什么要使用Cargo?

Adi*_*ngh 0 rust rust-cargo

我创建了一个简单的hello world程序:

fn main() {
    println!("Hello, world");
}
Run Code Online (Sandbox Code Playgroud)

使用rustcvs 编译代码时cargo build,cargo命令显示较慢.它需要1.6秒cargo buildVS 1Srustc.请参阅屏幕截图右侧的时间戳.

为什么是这样?我为什么还要用货?

She*_*ter 19

正如帕维尔斯特拉霍夫所说

Cargo不是编译器,它是一个包管理器.它运行rustc并执行一些额外的工作(例如,解析依赖项),因此它不能比裸机更快rustc.

你可以通过运行来看到这个cargo build --verbose,它输出rustc货物运行的命令:

$ cargo build --verbose
   Compiling hw v0.1.0 (file:///private/tmp/hw)
     Running `rustc --crate-name hw src/main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=3c693c67d55ff970 -C extra-filename=-3c693c67d55ff970 --out-dir /private/tmp/hw/target/debug/deps -L dependency=/private/tmp/hw/target/debug/deps`
    Finished dev [unoptimized + debuginfo] target(s) in 0.30 secs
Run Code Online (Sandbox Code Playgroud)

我为什么还要用货

上面的输出显示了一个原因:查看传递给的所有参数rustc.你知道他们每个人做了什么吗?你知道吗?Cargo将一些细节抽象出来,让您专注于代码.

Cargo也不仅仅是调用编译器.对大多数人来说,最大的好处是它可以根据版本管理您的依赖项,并允许发布您自己的包.它还允许在主编译之前运行的构建脚本.它有简单的方法来运行您的测试和示例.

更直接有用,Cargo会检查您是否应该重建:

$ time rustc src/main.rs
0:00.21
$ time rustc src/main.rs
0:00.22

$ time cargo build
0:00.41
$ time cargo build
0:00.09                   # Much better!
Run Code Online (Sandbox Code Playgroud)