上面这里有点绕,但是只要记?。?quot;可变不共享,共享不可变,结束前要还" 这句就行了 。下面看 2 个例子:
可变不共享 , 共享不可变
fnmAIn{
letmutx = 5;
lety = &x; // y 从 x 借用一个不可变引用
letz = &mutx; // y 从 x 借用一个可变借用 。报错 , 不能在一个作用域内同时出现可变借用和不可变借用
}
结束前要还
fnmain{
letmutx = 5; // x 是可变的,拥有值 5
lety = &mutx; // y 从 x 借用到一个可变引用
*y += 1; // 通过 y 来增加 x 的值,因为 y 是对 x 的可变引用
println!("x is {}", x); // 打印出了 6
} // y 超出了作用域,结束对 x 的引用
无畏并发
Rust 为并发代码提供了内置支持,这允许 Rust 程序充分利用多核 。由于 Rust 的所有权和类型系统,在 Rust 中不可能在编译时出现数据竞争,这就是所谓的“无畏并发” 。
多线程usestd::thread;
fnmain{
thread::spawn(|| {
println!("Hello new thread!");
});
}
这会从新的线程里打印“Hello new thread!”,它是和主线程并行的 。
线程通信
通道可以让消息在线程之间进行传递
usestd::thread;
usecrossbeam::channel;
fnmain{
let(tx, rx) = channel::unbounded;
thread::spawn(move|| {
tx.send("Hello from thread!").unwrap;
});
letmsg = rx.recv.unwrap;
println!("Got message: {}", msg); // Got message: Hello from thread!
}
这里我们创建了一个不限制大小的通道并生成一个新的线程,该线程在通道上发送消息 , 在主线程中接收消息并打印它 。
共享状态
虽然通道对于消息传递很有用,但有时线程需要访问共享的状态 。这可以通过互斥锁来锁定对临界区的访问,这个程序生成 10 个线程,每个线程增加一个共享计数器 。通过使用互斥锁,可以确保一次只有一个线程可以访问计数器增加的临界区 。
usestd::{
sync::{Arc, Mutex},
thread,
};
fnmain{
letcounter = Arc::new(Mutex::new(0));
letcounters = vec![counter.clone; 10];
forcounter in&counters {
letcounter = counter.clone;
thread::spawn(move|| {
letmutnum = counter.lock.unwrap;
*num += 1;
});
}
forcounter in&counters {
letnum = counter.lock.unwrap;
println!("{}", *num);
}
}
在 C/C++ 中实现并发可要小心翼翼,一不小心就出内存问题了 。
完善的工具链
Rust 有一套很好用的工具生态,比 C/C++ 的都要完善 , 比如:
- Cargo:类似于 NPM 的 Rust 包管理器和构建工具
- Rustup:有点类似于 nvm,用来管理 Rust 版本(稳定版,测试版,夜间版) 。
- Rustfmt:类似于 Prettier,代码风格格式化
- Clippy:类似于 ESLint,Rust 的静态代码分析工具
我是一个搞前端的 , 也在学 Rust 。不管怎样,通过学 Rust 还是能够获得比前端这个领域里更多的东西,学一学总没错,实在不行你来了解一下也行嘛 。
- Rust中的New Type解答了我十多年前的一个疑问
- Rust 与 C++:一场现代编程语言的较量
- 2024年,Rust和Go学哪个更好?
- vivo发布自研操作系统蓝河 (BlueOS),系统框架采用Rust编写
- 这些年来 Rust 在前端都干了些啥?
推荐阅读
- 50 条实用的编写Python 程序建议
- 小米手机发热是为什么?该怎么办?
- 夫妻离婚以后房子过户手续需要些什么? 夫妻离婚后房子过户需要什么手续
- cdr排版间距怎么调,cdr文件排版要怎样操作
- 爱的修学旅行:何猷君抱怨梁安琪偏心何超欣,下一秒却暴露宠妹心
- cdr怎么转成ps文件,ps要怎么样才能打开cdr文件
- cdr文件要咋导出jpg,cdr导出jpg速度很慢
- 怎么看笔记本型号,为什么我的笔记本的型号和鲁大师检测的不一样
- 冬季谨防呼吸道疾病,如何科学佩戴口罩?
- 炖鱼时,2种调料不要放,否则越炖越腥,越炖越柴