半个月前看完了《The Rust Programming Language》, 但是仍然感觉自己对Rust还是一知半解, 入门失败.
随后开始看《Programming rust》影印版, 感觉这本书讲得更好, 作者用了很多图来解释, 这本书也是一本巨厚的参考书类型, 目前啃了一半. so, 把之前的一些读书笔记记下来, 一方面把书读薄, 一方面算是Rust的入门失败笔记.
这系列主要面向有Rust入门失败经历的开发人员, 只列出个人觉得重要的东西.
bool
会占一个字节, 从而允许指针指向这个字节的地址.numeric
- 不允许隐式转换
- 如果需要调用类型的方法, 在有二意的情况下必须显式转换, 例如加后缀:
(2.0_f64).sqrt()
bool
,char
,enum
可以转换为任意整型integer
, 但反向转换不行, 唯一例外是u8
转char
char
- 大小32bit
- UNICODE编码
- 不允许任何形式的隐式转换
u8
是允许as
转换为char的唯一形式
String
- 不是char数组, 而是UTF-8变长序列
- ASCII字符占一个字节, 其余字符占多个不定长字节.
len()
方法返回的是字节长度, 而非字符长度chars().count()
返回字符长度- 一个栈上的String变量在内存中表示如下:
array, vector, slices
- 下标引用
[i]
只能用usize类型 - 一个栈上的vector变量在内存中的布局如下:
1
2
3
4
5
6
7
8fn print_padovan() {
let mut padovan = vec![1,1,1]; // allocated here
for i in 3..10 {
let next = padovan[i-3] + padovan[i-2];
padovan.push(next);
}
println!("P(1..10) = {:?}", padovan);
} // dropped here
- 下标引用
All images are copyrighted by original authors Jim Blandy & Jason Orendorff who wrote the book Programming Rust.