刚刚找到 Rust 并阅读了文档的前两章,我发现他们定义语言的方法和方式特别有趣。所以我决定弄湿我的手指并从Hello world开始......
我在 Windows 7 x64 上这样做了,顺便说一句。
fn main() { println!("Hello, world!"); }
发布cargo build并查看结果,targets\debug我发现结果.exe为 3MB。经过一番搜索(货物命令行标志的文档很难找到......)我找到--release了选项并创建了发布版本。令我惊讶的是,.exe 的大小只变小了一点点:2.99MB 而不是 3MB。
cargo build
targets\debug
.exe
--release
所以,承认我是 Rust 及其生态系统的新手,我的期望是系统编程语言会产生一些紧凑的东西。
谁能详细说明 Rust 正在编译什么,它怎么可能从 3 班轮程序中生成如此巨大的图像?是编译成虚拟机吗?是否有我错过的条命令(发布版本中的调试信息?)?还有什么可以让我们了解正在发生的事情吗?
Rust 使用静态链接来编译其程序,这意味着即使是最简单的Hello world!程序所需的所有库都将被编译到您的可执行文件中。这也包括 Rust 运行时。
Hello world!
要强制 Rust 动态链接程序,请使用命令行参数-C prefer-dynamic;这将导致文件大小更小 ,但 也需要 Rust 库(包括其运行时)在运行时可供您的程序使用。这实质上意味着如果计算机没有它们,您将需要提供它们,占用的 空间 比原来的静态链接程序占用的空间多。
-C prefer-dynamic
出于可移植性的考虑,我建议您以您曾经将程序分发给其他人的方式静态链接 Rust 库和运行时。