简介

Rust 是 基于表达式的语言

安装

https://www.rust-lang.org/zh-CN/tools/install

rust .cargo .rustup

%CARGO_HOME% %RUSTUP_HOME%

参考 https://cloud.tencent.com/developer/article/2384287

cargo

包管理工具最重要的意义就是任何用户拿到你的代码,都能运行起来,而不会因为各种包版本依赖焦头烂额。

1cargo new               # 创建新项目
2cargo run               # debug运行项目
3
4cargo run --release
5cargo build --release
6
7cargo check             # 编译检查
8cargo test              # 自动执行 src下的单元测试 和tests下的集成测试 (还有examples下的示例

编译速度似乎不如golang,优化部分作者没写,TODO

cargo.lock 文件自动包含创建时 依赖的最新版本,后续需要手动更新

1cargo update            # 更新所有依赖
2cargo update -p regex   # 只更新"regex"

cargo使用缓存提高构建效率,依赖包放在 CARGO_HOME 目录下

零碎

! 是宏操作符 for 隐式將集合转换成迭代器 Vec<_> _ 表示由编译器推断 if let 匹配表达式 使用_开头的变量名,会忽略未使用警告 const常量必须标注值的类型 ! 返回值永不返回 发散函数 diverge function () 单元类型 零长度元组 不占内存 函数没有返回值,那么返回一个 () 通过 ; 结尾的语句返回一个 () :: 是一种调用操作符,调用该类型的关联函数 clone 深拷贝操作 Copy特征 任何基本类型的组合可以 Copy ,不需要分配内存或某种形式资源的类型是可以 Copy 的 元组,当且仅当其包含的类型也都是 Copy 的时候 可变引用 &mut T 是不可以 Copy的 传参 返回值 也会有所有权变动 可变的引用 &mut s ,需要先创建 然后再传参 同一作用域 只能有一个可变引用 可以通过 {} 手动限制变量的作用域 可变引用与不可变引用不能同时存在 只使用基本类型的局限性:无法从更高的抽象层次去简化代码。 切片是对集合的部分引用 [开始索引..终止索引] 字符串切片时要注意UTF-8字符占用内存情况 字符是 Unicode 类型,每个字符占据 4 个字节,但是字符串每个字符所占字节数是变化的(1-4), 不允许索引字符串,而且索引操作 我们期望性能表现是 O(1),但是String需要遍历才能定位合法字符 使用+连接字符串,右边的参数必须为字符串的切片引用 包含双引号的字符串使用#包裹,包含#的字符串使用多个#包裹

? 自动解包 Result 或 Option 类型,并且將错误自动传播

特殊名词

悬空指针(Dangling Pointer) 二次释放(double free) 浅拷贝(shallow copy) 和 深拷贝(deep copy) 移动(move) 借用(Borrowing) Non-Lexical Lifetimes(NLL) 悬垂引用(Dangling References) 生命周期(lifetimes) Deref 特征

编译器属性标记

1#![allow(unused_variables)]
2#[allow(dead_code)]

镜像

官方 crates.io

待处理

cargo add 添加依赖 cargo add serde –features derive // 并启用宏

derive宏 trait(特征)

chrono 用于日期时间处理 serde 用于序列化与反序列化