Rust入门失败之基础数据类型

半个月前看完了《The Rust Programming Language》, 但是仍然感觉自己对Rust还是一知半解, 入门失败.

随后开始看《Programming rust》影印版, 感觉这本书讲得更好, 作者用了很多图来解释, 这本书也是一本巨厚的参考书类型, 目前啃了一半. so, 把之前的一些读书笔记记下来, 一方面把书读薄, 一方面算是Rust的入门失败笔记.

这系列主要面向有Rust入门失败经历的开发人员, 只列出个人觉得重要的东西.

  • bool
    会占一个字节, 从而允许指针指向这个字节的地址.

  • numeric

    • 不允许隐式转换
    • 如果需要调用类型的方法, 在有二意的情况下必须显式转换, 例如加后缀: (2.0_f64).sqrt()
    • bool, char, enum 可以转换为任意整型integer, 但反向转换不行, 唯一例外是u8char
  • char

    • 大小32bit
    • UNICODE编码
    • 不允许任何形式的隐式转换
    • u8是允许 as 转换为char的唯一形式
  • String

    • 不是char数组, 而是UTF-8变长序列
    • ASCII字符占一个字节, 其余字符占多个不定长字节.
    • len()方法返回的是字节长度, 而非字符长度
    • chars().count()返回字符长度
    • 一个栈上的String变量在内存中表示如下:
      String memory model
  • array, vector, slices

    • 下标引用[i]只能用usize类型
    • 一个栈上的vector变量在内存中的布局如下:
      1
      2
      3
      4
      5
      6
      7
      8
      fn 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
      vector memory model

All images are copyrighted by original authors Jim Blandy & Jason Orendorff who wrote the book Programming Rust.