The Rust Programming Language - 第13章 Rust语言中的函数式语言功能:迭代器与闭包 - 13.4 性能对比:循环VS迭代器

13 Rust语言中的函数式语言功能:迭代器与闭包

函数式编程风格通常包括将函数作为另一个函数的参数、返回值,将函数作为值赋值给变量,以供后续执行

本章中我们将会介绍以下内容:

闭包:一个可以存储在变量里的类似函数的数据结构

迭代器:一种处理元素序列的方式

如何使用这些功能来改进第十二章的I/O项目

这两个功能的性能(剧透警告:它们的速度超乎你的想象)

我40米的大刀已经饥渴难耐了,让我们攻下这一章!

13.4 性能对比:循环VS迭代器

为了决定使用哪个实现我们来测试一下哪个版本更快:是for循环更快还是迭代器更快,如下是测试代码,结果迭代器更快!

test bench_search_for  ... bench:  19,620,300 ns/iter (+/- 915,700)
test bench_search_iter ... bench:  19,234,900 ns/iter (+/- 657,200)

我们再多谈一点迭代器,迭代器作为一种更高级的抽象,被编译成了与手写的底层代码大体一致性能代码。迭代器是Rust的零成本抽象之一,它意味着抽象并不会引入运行时开销

另一个例子:音频解码器的代码

let buffer: &mut [i32];
let coefficients: [i64; 12];
let qlp_shift: i16;

for i in 12..buffer.len() {
    let prediction = coefficients.iter()
                                 .zip(&buffer[i - 12..i])
                                 .map(|(&c, &s)| c * s as i64)
                                 .sum::<i64>() >> qlp_shift;
    let delta = buffer[i];
    buffer[i] = prediction as i32 + delta;
}

像音频解码器这样的程序通常看重性能,这里我们创建了一个迭代器,使用了两个适配器,接着消费了其值

闭包和迭代器是Rust受函数式子编程语言观念所启发的功能,他们对Rust以底层的性能来明确表达高级概念的能力有很大贡献,同时他们也不影响性能

那下一章,让我们看看更多的cargo功能,将好的项目分享给全世界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值