feat: add rust cheatsheet

pull/94/head
Shieber 3 years ago
parent c364abd445
commit dd550f982e

@ -21,6 +21,7 @@
- [Bash](languages/bash.sh)
- [JavaScript](languages/javascript.md)
- [Go](languages/golang.go)
- [Rust](languages/rust.rs)
- [PHP](languages/php.php)
- [VimScript](languages/vimscript.md)
- [Python](languages/python.md)

@ -0,0 +1,421 @@
/*******************************************************************************
* Rust CHEATSHEET () - by Shieber (created on 2022/04/17)
* Version: 1, Last Modified: 2022/04/17 13:08
* https://github.com/skywind3000/awesome-cheatsheets
******************************************************************************/
/******************************************************************************
* rustc
*****************************************************************************/
rustc [options] input // rustc [参数] 输入
rustc file.rs // 编译 crate
rustc --cfg 'verbose' // 配置编译环境
rustc --cfg 'feature="serde"' // 配置编译环境
rustc -L // 将目录添加到库搜索路径
rustc -l // 将生成的 crate 链接到本地库
rustc --crate-type rlib // 向编译器指明要构建的 crate 类型
rustc --crate-name name // 向编译器指明要构建的 crate 名称
rustc --edition 2021 // 向编译器指明要使用的语义版本
rustc --emit mir // 向编译器指明输出文件的类型
rustc --print // 打印编译器信息
rustc -g // 包含调试信息、等同于使用 -C debuginfo=2
rustc -O // 优化代码、等同于 -C opt-level=2
rustc -o // 指定输出文件名
rustc --out-dir dir // 将输出写入的目录
rustc --explain discription // 提供错误消息的详细说明
rustc --test // 构建测试工具
rustc --target TARGET // 选择要构建目标的三要素
rustc -A // 设置 lint 许可等级
rustc -W // 设置 lint 警告等级
rustc -D // 设置 lint 拒绝等级
rustc -F // 设置 lint 禁止等级
rustc -C // 代码生成选项
rustc -V // 输出版本
rustc -v // 详细输出编译信息
rustc --extern dir // 指定外部库的位置
/******************************************************************************
* cargo
*****************************************************************************/
cargo [+toolchain] [options] [subcommand] // cargo [工具链] [参数] [子命令]
cargo -V // 输出版本信息
cargo -list // 输出 cargo 安装的命令
cargo --explain code // 调用 rustc --explian code 输出解析信息
cargo -v // 输出详细信息
cargo -q // 不输出日志信息
cargo --color when // 设置是否输出颜色when 对应 auto、always、never
cargo --frozen // 冻结版本,禁止升级
cargo --locked // 锁定版本,禁止升级
cargo --offline // 离线运行
cargo --config key=value // 覆盖默认的配置值
cargo -Z flag // 开启 unstable 特性
cargo -h // 输出帮助信息
cargo build // 编译包及其依赖项
cargo run // 编译并运行
cargo bench // 执行包中的所有 benchmark
cargo test // 运行包中的所有测试
cargo check // 检查包并报告错误
cargo clean // 清除 target 目录
cargo clippy // 检查包代码的错误,用于提升代码质量
cargo doc // 生成构建包及其依赖的文档
cargo fix // 自动修复 rustc 抛出的警告
cargo flamegraph // 生成火焰图
cargo fmt // 调用 cargofmt 来格式化代码
cargo new // 新建一个包
cargo init // 在某目录下新建包
cargo install // 安装库到 $HOME/.cargo/bin 下
cargo uninstall // 移除安装的库
cargo update // 更新 Cargo.lock 里的依赖
cargo search // 搜索 crates.io 上注册过的 crate
cargo publish // 打包并发布到 crates.io
/*******************************************************************************
* Package
*******************************************************************************/
cargo new name --lib // 新建名为 name 的库
cargo new name --bin // 新建名为 name 的二进制文件
Cargo.toml // 依赖文件及其他选项配置
Cargo.lock // 依赖管理
/******************************************************************************
*
*****************************************************************************/
Self enum match super
as extern mod trait
async false move true
await fn mut type
break for pub union
const if ref unsafe
continue impl return use
crate in self where
dyn let static while
else loop struct
/*******************************************************************************
*
*******************************************************************************/
bool // 布尔
char // 字符
str // 不可变序列
&str // str 的引用
String // 动态字符串
tuple // 元组
array // 数组
slice // 切片
isize // 有符号整型 (32位操作系统上为i3264位操作系统上为i64)
i8 // 8位有符号整型
i16 // 16位有符号整型
i32 // 32位有符号整型
i64 // 64位有符号整型
usize // 无符号整型(32位操作系统上为u3264位操作系统上为u64)
u8 // 8位无符号整型
u16 // 16位无符号整型
u32 // 32位无符号整型
u64 // 64位无符号整型
f32 // 32位浮点数精确到小数点后7位
f64 // 64位浮点数精确到小数点后15位
/*******************************************************************************
* Hello World
******************************************************************************/
// main.rs
fn main() { // 主函数
println!("Hello World!") // println! 宏打印输出
}
// rustc main.rs // 编译
// ./main // 运行
/*******************************************************************************
*
******************************************************************************/
// 算数操作符
+ - * / % // 加 减 乘 除 取余
& | ^ // 位与 位或 位异或 位与非
<< >> // 左移 右移
+= -= *= /= %= // 加 减 乘 除 取余 [带赋值功能]
&= |= ^= // 位与 位或 位异或 [带赋值功能]
<<= >>= // 左移 右移 [带赋值功能]
// 比较操作
== != // 等于 不等于
< <= // 小于 小于等于
> >= // 大于 大于等于
// 逻辑操作
&& || ! // 逻辑与 逻辑或 逻辑非
// 其他
& * -> => @ // 引用 解引用 表示返回值 模式匹配 模式绑定
/*******************************************************************************
*
******************************************************************************/
let a = 1 // 直接声明一个变量,类新自动推导
let mut b: i8 = 1 // 直接声明一个可变量,指定类型
const d = 1 // 常量
/*******************************************************************************
*
******************************************************************************/
let s = "hello" // &str
let c = 'c' // 字符
let a = 1 // int
let b = 1.2 // float64
let arr1 = [0; 5] // 手动指定数组长度
let arr2 = [0,0,0,0,0] // 由 rust 自动计算长度
let sliceInt = &arr2[..3] // 切片
let a = &arr1 // 引用
let a = &arr2[..2] // 部分引用
/*******************************************************************************
*
******************************************************************************/
// for/for in
for i > 0 {
println!("{i}");
i -= 1;
}
for i in arr {
println!("{i}");
}
// if/else if/else
if i == 10 {
println!("i == 10")
} else {
println!("i != 10")
}
// if let/let if
let a = if i > 5 { 2 } else { 3 };
if let Some(x) = k { x; } else { println!("0"); };
if let Some(value) = k {
println!("{:?}", value);
}
// match
match xx {
None => { xxx },
Some(x) => { xxx },
}
// while
while a > 10 {
println!("{a}");
a -= 1;
}
while Some(x) = k {
println!("{:?}", x;)
}
// loop
loop {
if i > 10 {
break;
}
println!("{i}");
i += 1;
}
/*******************************************************************************
*
******************************************************************************/
// 以 fn 关键字声明
fn function(var1: type, var2: type) -> returnType {
codeBody;
returnValue
}
// 闭包函数
let f = |x, y| { codeBody; returnValue }
f()
// 函数多返回值
fn get() -> (type1, type2) {
codeBody;
(value1, value2)
}
/*******************************************************************************
*
******************************************************************************/
// rust 中没有class只有struct
struct People {
age: u8
pub name: String // pub 开头的变量可在包外访问
}
let p1 = People{ // 最好按照结构体内部定义的顺序
age: 25,
name: "Kaven".to_string()
}
let age = 20;
let p1 = People{ // 有同名变量,直接使用
age,
name: "Shieber".to_string()
}
/*******************************************************************************
*
******************************************************************************/
// 方法通常是针对一个 trait 来说的
trait Foo {
fn get(x: type1, y: type2) -> returnType;
}
impl Foo for xx {}
// xx 重载 get 方法
impl xx {
fn get(x: type1, y: type2) -> returnType {
codeBody;
returnValue
}
}
/*******************************************************************************
* Trait
******************************************************************************/
// rust 的 trait 类似其他语言的接口这个概念
trait Reader {
fn reading(); // 实现 reading 方法就实现了接口 Reader
}
impl Reader for xx {
fn reading() -> returnType {
codeBody;
returnValue
}
}
/*******************************************************************************
*
******************************************************************************/
fn add<T>(x: T, y: T) -> T {
x + y
}
fn main() {
let a = 1;
let b = 2;
let c = 1.0;
let d = 2.0;
let e = add(a, b);
let f = add(c, d);
println!("{e}, {f}");
}
/*******************************************************************************
*
******************************************************************************/
fn main() {
// 求小于1000的能被3或5整除的所有整数之和
let sum = (1..1000).filter(|n| n % 3 == 0 || n % 5 == 0).sum::<u32>();
println!("{sum}");
}
/*******************************************************************************
*
******************************************************************************/
use std::fs::File;
use std::fs::io;
use std::fs::io::ErrorKind;
use std::fs::Read;
fn main() {
let f = Fill::oepn("test.txt");
let f = match f {
Ok(file) => file,
Err(err) => match err.kind() {
ErrorKind::NotFound => match Fill::crate("test.txt") {
Ok(fc) => fc,
Err(e) => panic!("Error while creating file!"),
}
ErrorKind::PermissionDenied => panic!("PermissionDenied"),
other => panic!("Error while openning file!"),
}
}
let a = Fill::oepn("test.txt").unwrap(); // 直接 unwrap不用 match有错报错
let b = Fill::oepn("test.txt").expect("Error while openning file!"); // 添加额外错误信息
let c = Fill::oepn("test.txt")?; // 将错误往上抛
}
/*******************************************************************************
*
******************************************************************************/
// 宏定义格式
macro_rules! macro_name {
($matcher) => {
$code_body;
return_value
};
}
// 求树的左子节点
macro_rules! left_child {
($parent:ident) => {
$parent << 1
};
}
// 求树的右子节点
macro_rules! right_child {
($parent:ident) => {
($parent << 1) + 1
};
}
/*******************************************************************************
*
******************************************************************************/
// 入门书籍
Rust // 官方出品
Rust // 推荐
Rust // 推荐
// 进阶书籍/文档
Cargo
Rust
rustc
Rust
Rust
// 特定领域
Wasm: https://wasmer.io、https://wasmtime.dev、https://wasmedge.org
HTTP/3: https://github.com/cloudflare/quiche
coreutils: https://github.com/uutils/coreutils
: https://github.com/TheAlgorithms/Rust
: https://github.com/bevyengine/bevy
: https://github.com/rustdesk/rustdesk
: https://github.com/w3f/polkadot
: https://github.com/tikv、https://github.com/tensorbase/tensorbase
: https://github.com/rust-lang/rustc_codegen_gcc
: https://github.com/Rust-for-Linux、https://github.com/rcore-os
Web : https://github.com/yewstack/yew、 https://github.com/denoland/deno
Web : https://actix.rs/、 https://github.com/tokio-rs/axum、 https://github.com/poem-web/poem
// 资源网站
Rust : https://www.rust-lang.org
Rust : https://github.com/rust-lang/rust
Rust : https://doc.rust-lang.org/stable
Rust : https://doc.rust-lang.org/reference
Rust : https://rustmagazine.github.io/rust_magazine_2021
Rust /: https://crates.io、https://lib.rs
Rust : https://rustcc.cn
Rust : https://learnku.com/rust
Rust : https://www.yuque.com/zhoujiping/programming/rust-materials
Rust LeetCode: https://rustgym.com/leetcode
Awesome Rust: https://github.com/rust-unofficial/awesome-rust
Rust Cheat Sheet: https://cheats.rs
: https://books.budshome.com
: https://space.bilibili.com/485433391
Loading…
Cancel
Save