Rust中使用use通配符导入的内容是否都会被包含进二进制文件?
Rust通配符导入与二进制文件内容的关系
- 使用
use some_crate::*这类通配符导入时,不会把所有被导入的内容都塞进最终的二进制文件里。 - 不管用通配符导入还是精准导入,最终构建的文件只会包含你代码里实际用到的导入内容。
举个例子,use std::io::prelude::*这个导入会把io模块常用的trait(比如Read、Write)都引入当前作用域,但只要你的代码里只用到了Read来读取数据,那Write相关的代码就会被编译器的死代码消除机制完全剔除,不会出现在最终的二进制文件中。
本质上,Rust的use语句只是给当前作用域添加名称别名,它不会触发代码的强制编译。编译器只会追踪你实际调用、使用的符号,只把这些符号及其依赖的必要代码编译进二进制,没用到的部分都会被优化掉。
内容的提问来源于stack exchange,提问作者tasuren
相关产品推荐
相关产品推荐

