在找到Rust并阅读了文档的前两章之后,我发现他们定义语言的方法和方式特别有趣.所以我决定把手指弄湿,从Hello world开始...

顺便说一句,我是在Windows 7 x64上这么做的.

fn main() {
    println!("Hello, world!");
}

发出cargo build并查看targets\debug中的结果,我发现结果.exe为3MB.经过一些搜索(很难找到Cargo 命令行标志的文档…)我找到了--release选项并创建了发布版本.令我惊讶的是.exe的大小只会变得很小:2.99MB而不是3MB.

因此,承认我是Rust及其生态系统的新手,我的期望是一种系统编程语言能够产生紧凑的东西.

谁能详细说明一下Rust编译的目的是什么,它如何可能从一个3行程序中生成如此巨大的图像?是编译到虚拟机吗?我是否错过了一个strip命令(发布版本中的调试信息?)?还有什么能让你明白发生了什么吗?

推荐答案

Rust使用静态链接编译其程序,这意味着即使是最简单的Hello world!个程序所需的所有库都将编译到可执行文件中.这还包括Rust运行时.

要强制Rust动态链接程序,请使用命令行参数-C prefer-dynamic;这将导致更小的文件大小but还需要Rust库(包括其运行时)在运行时可供您的程序使用.

对于可移植性,我建议您以将程序分发给其他人的方式静态链接Rust库和运行时.

Rust相关问答推荐

使用InlineTables序列化toml ArrayOfTables

如何在Rust中为具有多个数据持有者的enum变体编写文档 comments ?

使用pyo3::Types::PyIterator的无限内存使用量

通过不同的字段进行散列和排序的 struct (需要不同的EQ实现)

无法定义名为&new&的关联函数,该函数的第一个参数不是self

Pin<;&;mut可能将Uninit<;T>;>;合并为Pin<;&;mut T>;

异步函数返回的future 生存期

允许 rust 迹 struct 条目具有多种类型

解析程序无法在Cargo 发布中 Select 依赖版本

我应该如何表达具有生命周期参数的类型的总排序,同时允许与不同生命周期进行比较?

Windows 上 ndarray-linalg 与 mkl-stats 的链接时间错误

使用 serde::from_value 反序列化为泛型类型

Rust:为什么 &str 不使用 Into

如何使用tracing-subscriberRust crate 构建多编写者、全局过滤订阅者

返回迭代器考虑静态生命周期类型

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

我可以在 Rust 中 serde struct camel_case 和 deserde PascalCase

从Rust 的临时文件中创建引用是什么意思?

rust 中不同类型的工厂函数

更好的方法来模式匹配带有 Rust 的窥视孔装配说明窗口?