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:在不同线程中共享访问是安全的 TSync &TSend

Rc<T> 非线程安全,Arc<T>Mute<T> 线程安全

Arc<T> 实现 Send 和 Sync  T 实现 Send 和 Sync Mutex<T> 实现 Send 和 Sync  T 实现 Send

异步

异步是一种并发模型 rust的异步操作基于future,future由异步运行时轮询 有几种不同的异步运行时可用

阻塞线程,意味着阻止运行时切换当前任务,即同一运行时上的其他任务将停止运行。 ref

参考