Rust中saturating_sub的使用

为了防止整数溢出,开发人员通常使用checked_add、checked_sub、saturating_add、saturating_sub等函数,而不是简单的加法和减法(+、-)


关于饱和减法

Rust中peekable的使用

在 Rust 中,从迭代器中获取(也就是“消费”)一个元素,每次调用 next 方法都会“消费”迭代器的一个元素,这意味着此元素被从迭代器中移除并返回给调用者, 一旦一个元素被消费,它就不能再次从同一个迭代器中获取。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fn main() {
let numbers = vec![1, 3, 5, 4, 9, 6, 7];
let mut iter = numbers.iter(); // 创建一个迭代器

// 消费第一个元素
if let Some(first) = iter.next() {
println!("The first number is {}", first);
}

// 继续消费剩余的元素
for number in iter {
println!("Next number: {}", number);
}
}

输出:

一些技术金句

《编程元素》一书中,作者Alexander Stepanov写到:“函数式编程处理值;命令式编程处理对象。”

写Rust,(对象和引用:万恶之源), 有三大内伤: 1,漏洞百出的抽象,2,组合变成了“苦修”,3,Fearless Concurrency是一个谎言


Rust Async 异步编程-详细版

回顾过去,我认为可以公平地说,Go在让编程界相信并发是一种强大工具方面发挥了重要作用,特别是在多核网络世界中,它可以比pthread做得更好。如今,大多数主流语言都对并发提供了很好地支持。

另外,Go的并发版本在导致它出现的语言线中有些新颖,因为它使goroutine变得平淡无奇。没有协程,没有任务,没有线程,没有名称,只有goroutine。我们发明了“goroutine”这个词,因为没有适合的现有术语。时至今日,我仍然希望Unix的拼写命令可以学会它。

顺便说一句,因为我经常被问到,让我花一分钟时间谈谈async/await。看到async/await模型及其相关风格成为许多语言选择支持并发的方式,我有点难过,但它肯定是对pthreads的巨大改进。