Day 1
rust不支持函数重载,用宏实现可变参数
char是32位
char是32位,bool是8位
{:?}
{:?}打印实现了Debug trait的,{}打印实现了Display trait的
{:#?} pretty打印Debug trait
&mut
let ref_x: &mut i32:引用了可变值,类似c++中的引用
let mut ref_x: &i32:引用本身可变,类似c++中的指针
&str和String
&str不可变字符串的引用
String可变字符串缓冲区
const
const类似于c++中的constexpr
static类似于c++中的const或可变全局变量
值默认是move语义
rust中值默认是move的,c++中值默认是copy的
Copy和Clone的区别
Copy是指内存区域的按位复制,不适用于任意对象 Clone是一种更通用的操作
Day 2
#?impl IntoIterator for &Vec<T> 和 impl IntoIterator for Vec<T>什么区别
niche
壁凹,T类型中一些语义无效值的位表示
a niche left in the encoding of one type provides code-points for encoding related-but-distinct information.
Box
Box类似c++中的std::unique_ptr
Rc类似c++中的std::shared_ptr
Box<dyn Animal>,实现Animal接口的动态子类指针
Day 3
Result
Result用于正常流程中的预期错误
panic用于非预期错误
expr?
return err if err,用于传播错误,是下面的简写
match expr {
Ok(value) => value,
Err(err) => return Err(err),
}.unwrap()和.expect()
panic if err,类似c++的assert
#[cfg(test)]
被#[cfg(test)] 属性标注的,只在cargo test时有效
Send和Sync
Send:在不同线程中唯一访问是安全的
Sync:在不同线程中共享访问是安全的
T是 Sync 的&T 是 Send 的
Rc<T> 非线程安全,Arc<T>、Mute<T> 线程安全
Arc<T> 实现 Send 和 Sync T 实现 Send 和 Sync
Mutex<T> 实现 Send 和 Sync T 实现 Send
异步
异步是一种并发模型 rust的异步操作基于future,future由异步运行时轮询 有几种不同的异步运行时可用
阻塞线程,意味着阻止运行时切换当前任务,即同一运行时上的其他任务将停止运行。
ref