gpt4 book ai didi

rust - 为什么这个 Rust 比我类似的 Python 慢?

转载 作者:行者123 更新时间:2023-11-29 07:46:24 25 4
gpt4 key购买 nike

<分区>

我有以下 Rust 程序(rustc 1.0.0-nightly (44a287e6e 2015-01-08 17:03:40 -0800)):

use std::io::BufferedReader;
use std::io::File;

fn main() {
let path = Path::new("nc.txt");
let mut file = BufferedReader::new(File::open(&path));
let lines: Vec<String> = file.lines().map(|x| x.unwrap()).collect();
println!("{}", lines[500]);
}

根据 http://doc.rust-lang.org/std/io/ 中的示例以上是将文件的行拉入字符串向量的方法。我输入了第 500 行的输出。

为了在 Python 中解决相同的任务,我编写了以下内容:

#!/usr/local/bin/python3

def main():
with open('nc.txt', 'r') as nc:
lines = nc.read().split('\n')
print("{}".format(lines[500]))

if __name__ == '__main__':
main()

当我运行编译后的 Rust 并对其计时时,我得到了这个:

rts@testbed $ time ./test
A declaration of independence by Kosovo will likely bring a similar declaration from Georgia's breakaway Abkhazia region, which Russia could well recognize.

./test 1.09s user 0.02s system 99% cpu 1.120 total

运行 Python 得到:

rts@testbed $ time ./test.py 
A declaration of independence by Kosovo will likely bring a similar declaration from Georgia's breakaway Abkhazia region, which Russia could well recognize.
./test.py 0.05s user 0.03s system 90% cpu 0.092 total

我知道 println! 是一个扩展为更复杂的宏

::std::io::stdio::println_args(::std::fmt::Arguments::new({
#[inline]
#[allow(dead_code)]
static __STATIC_FMTSTR: &'static [&'static str] = &[""];
__STATIC_FMTSTR
},
&match (&lines[500],) {
(__arg0,) => [::std::fmt::argument(::std::fmt::String::fmt, __arg0)],
}));

不过,这看起来不像是会导致额外执行时间超过一秒的事情。这些代码片段实际上不相似吗?我是否误解了将行读入向量并输出其中一个的最有效方法?

供引用 nc.txt 具有以下属性:

rts@testbed $ du -hs nc.txt 
7.5M nc.txt
rts@testbed $ wc -l nc.txt
60219 nc.txt

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com