语法速查

集合或迭代器

  • drain()方法:核心功能是移除集合中指定范围的元素,同时保持集合的连续性,是一种比**多次调用remove()**更高效的批量处理方式

所有权

  • 所有权可变性是独立的
  • 所有权完整性保护针对集合
    • 集合需要保证所有元素位置有效
    • 集合在内存中是连续的
  • 结构体允许字段被转移走所有权
    • 结构体字段具有独立性,布局在编译时可知
  • 所有者离开作用域,值将被丢弃

变量和类型

  • ref&

    • &用于创建引用
    • &用于模式匹配时,行使的是解构操作(一般作用是隐式解引用)
    • ref用于模式匹配,获取引用而不是获取所有权
  • T: 'static:表示类型T内部字段要么没有引用,要么引用都是'static

  • trait My Trait: 'staticBox<dyn MyTrait + 'static

    • 实现类型必须满足:Self: 'static
  • (PathBuf, Path)(String, str)(BytesMut/Vec<u8>, &[u8]

    • Path,str都是DST类型
    • PathBuf和String都是拥有所有权的
    • 文件路径长度和字符串长度在编译时未知
  • &buf&buf[..]的区别

    • &buf获取整个数组的引用,类型是&[u8; N]&Vec<u8>(固定大小数组)
    • &buf[..]获取数组的切片引用,类型是&[u8](动态大小切片)
  • 格式化输出语法

    {[参数索引]:[填充字符][对齐方式][宽度][.精度][类型]}
    
  • fmt::Formatter是一个功能强大的格式化缓冲区,可以输出到字符串、stdout、文件等


结构体

  • Rust不允许将struct中某个字段标记为可变
  • Rust中源文件(.rs)隐性的视为一个模块,区别于mod的显式声明

闭包

  • 根据闭包捕获环境方式可分为三种,注意区分闭包 捕获的环境变量闭包的参数
    • FnOnce获取所有权
    • FnMut获取可变引用
    • Fn获取不可变引用

并发编程

  • 并发编程主要有两种核心范式:共享状态并发消息传递并发
  • std::thread::scope
    • 相当于thread::spwan + thread::join,但是它们只能借用'static或者move变量
    • scope没有以上限制,有编译器的支持
  • MutexMutexGuard
    • Mutex是互斥锁本身
    • MutexGuard指访问受互斥锁保护数据的“许可证”或“钥匙”
  • park()/unparksleep()
    • park()/unpark()精准的控制线程的睡眠(park)与唤醒(unpark)
    • sleep()基于时间自动唤醒,无法提前唤醒
使用 Hugo 构建
主题 StackJimmy 设计