使用std::io::Result作为IOResult;`比`使用std::io更有效;在Rust中引用io::Result?

mspsb9vt  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(121)

在学习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中都是等价的吗?还是最后一种方法效率不高?

mlmc2os5

mlmc2os51#

Rust的use与C/++的#include不同。
在C/++中,当你#include某个东西时,你实际上命令编译器编译它。否则,可能无法编译。
在Rust中,use只是一个方便的简写。我们可以完全避免它-并且总是使用完全限定的名称(fn main() -> std::io::Result<()>)。除了use语句本身之外,它不会导致编译器编译更多的东西--这只会给程序增加很少的开销。
Glob导入(use foo::*),因为名称解析必须看起来更困难,所以比较昂贵,但它只会影响编译时间一点点(太小了,你永远不应该担心),而且根本不会影响运行时的性能。

相关问题