Rust权威指南 读书笔记

bookcover|200

《Rust权威指南》
本书由 Rust 核心开发团队编写而成,由浅入深地探讨了 Rust 语言的方方面面。从学习函数、选择数据结构及绑定变量入手,逐步介绍所有权、trait、生命周期、安全保证等高级概念,模式匹配、错误处理、包管理、函数式特性、并发机制等实用工具,以及两个完整的项目开发实战案例。 作为开源的系统级编程语言,Rust 可以帮助你编写出更为快速且更为可靠的软件,在给予开发者底层控制能力的同时,通过深思熟虑的工程设计避免了传统语言带来的诸多麻烦。 本书被视为 Rust 开发工作的必读书目,适合所有希望评估、入门、提高和研究Rust语言的软件开发人员阅读。

[!tip]- 作者简介

Steve Klabnik,Rust文档团队负责人,Rust核心开发者之一,Rust布道者及高产的开源贡献者,此前致力于Ruby等项目的开发。
Carol Nichols,Rust核心团队成员,i32、LLC联合构建者,Rust Belt Rust会议组织者。
毛靖凯,游戏设计师,一直专注于游戏领域研发,曾负责设计和维护了多个商业游戏的基础框架。业余时间活跃于Rust开源社区,并尝试使用Rust来解决游戏领域中的诸多问题。
唐刚,资深开发者,Rustcc社区创始人和维护者之一。目前就职于Cdot Network。使用Rust从事区块链共识协议的开发工作。
沙渺,嵌入式开发者,国内Rust语言社区和Raspberry Pi(树莓派)开发社区早期参与者。负责维护多个RISC-V架构硬件平台的基础函数库。


🗒️我的笔记

Rust简介

主要是看视频 https://www.bilibili.com/video/BV1hp4y1k7SV?p=2&spm_id_from=pageDriver

Rust 特别擅长的领域:

  • 高性能 Web Service
  • WebAssembly
  • 命令行工具
  • 网络编程
  • 嵌入式设备
  • 系统编程

Rust优点:

  • 性能
  • 安全性
  • 无所畏惧的并发

install

https://www.rust-lang.org/
安装 in mac
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

更新:
rustup update

卸载Rust
rustup self uninstall

验证安装:
rustc --version

查看本地文档:
rustup doc

hello world

rustc main.rs 编译
Rust的缩进是4个空格而不是tab
println! 是个宏。函数是没有!的。
rustc 只适合简单的Rust程序。

hello Cargo

复杂的程序得用Cargo。
Cargo是Rust的构建系统和包管理工具。

  • 构建代码、下载依赖的库、构建这些库…

创建项目 cargo new xxx

cargo build 编译构建项目。会生成target目录,可执行文件就在里面。
cargo run 会编译 并运行项目。
cargo check 检查项目,比build快很多。

为发布构建,得加参数--release
cargo build --release 编译时会进行优化,编译的更慢,生成的执行文件运行的更快。

猜数游戏

use std::io;   // 引用标准库
  
fn main() {
   
     
    println!("猜数!");  
    println!("测试一个数");   
    let mut guess = String::new();   // let 默认声明常量。加上mut才是变量。 new类似于静态方法调用。
    io::stdin().read_line(&mut guess).expect("无法读取行");  // &表示按引用传递。 expect表示错误处理。 Can 
    println!("你猜测的数是:{}", guess);  //{}是占位符。类似于%s
}

rust中库不叫lib, 而是叫crate.

为了生成随机数,得引用一个叫rand的crate。
直接在Cargo.toml里添加即可。

[dependencies]  
rand = "0.3.14"

版本依赖会存到Cargo.lock 中,更新版本时也会更新Cargo.lock

trait 类似于其他语言的接口。

match guess.cmp(&secret_number) {
   
     
    Ordering::Less=>println!("Too small!"),  
    Ordering::Greater => println!("Too big!"),  
    Ordering::Equal => println!("You win"),  
} // match 类似于其他语言里的switch.

match 类似switch

loop 引入无限循环。break 退出循环。

如果要处理异常,而不是直接panic, 就需要去掉expect, 改成match自己匹配了。

完整的代码:

use std::cmp::Ordering;  
use std::io;  
use rand::Rng;  
  
fn main() {
   
     
    println!("猜数!");  
    let secret_number = rand::thread_rng().gen_range(1,101); // i32 u32 i64  
    // println!("神秘数字是:{}", secret_number);  
    loop {
   
     
        println!("测试一个数");  
        let mut guess = String::new();  
        io::stdin().read_line(&mut guess).expect("无法读取行");  
        println!("你猜测的数是:{}", guess);  
        // shadow  
        let guess:u32 = match guess.trim().parse() {
   
     
            Ok(num) => num,  
            Err(_) => continue,  
        };  
        match guess.cmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值