在学习Rust的过程中,我看到了人们导入std::io::Result
等库的多种方式,例如:
use std::io::Result as IOResult;
和/或
pub type IOResult<T> = std::io::Result<T>;
然而,我见过的最多的一个,文档似乎建议的是导入所有的std::io
,然后在代码中引用Result,如io::Result
,如下所示:
use std::io;
fn main() -> io::Result<()> {}
这一点对我很有吸引力,因为它似乎更加清晰。然而,我不确定Rust如何处理引擎盖下的导入。我担心通过使用所有std:io,我导入的东西比我需要的多,可能会使我的代码效率降低,尺寸变大,增加编译时间等。Rust是否为您优化了此代码?所有这些语句在Rust中都是等价的吗?还是最后一种方法效率不高?
1条答案
按热度按时间mlmc2os51#
Rust的
use
与C/++的#include
不同。在C/++中,当你
#include
某个东西时,你实际上命令编译器编译它。否则,可能无法编译。在Rust中,
use
只是一个方便的简写。我们可以完全避免它-并且总是使用完全限定的名称(fn main() -> std::io::Result<()>
)。除了use
语句本身之外,它不会导致编译器编译更多的东西--这只会给程序增加很少的开销。Glob导入(
use foo::*
),因为名称解析必须看起来更困难,所以比较昂贵,但它只会影响编译时间一点点(太小了,你永远不应该担心),而且根本不会影响运行时的性能。