Rust

470 阅读4分钟

您的 rust 的第一个函数

fn main() {
    println!("hello, rust world!")
}

rust 语言工具链 rustup

# 从网络开始
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 结束自己
rustup self uninstall

安装了之后,就能在 ~/.cargo/bin 下找到下面三个命令:

  • rustc(rustc 代码编译器)
  • cargo (rust 项目管理工具)
  • rustup (rust 语言管理工具)

rustup 本地文档

  • rustup doc
file:///Users/magnesium/.rustup/toolchains/stable-x86_64-apple-darwin/share/doc/rust/html/index.html

rustc 执行一次编辑

// main.rs
fn main() {
    println!("hello, rust world!")
}
rustc main.rs

rust 的编辑器支持

# 安装
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 升级
rustup update
# 版本
rustc --version #rustc 1.46.0 (04488afe3 2020-08-24)
# 获取 rust 文档
rustup doc
# 初始化一个项目
cargo new <project-name>
# 运行运行一个项目
cd <project-name>
cargo run
#or
cargo build

rust cargo 的配置文件 yaml

[package]
name = "my-project"
version = "0.1.0"
authors = ["Magnesium- <xxxxxxx@xx.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

语法

变量

  • 一般情况下变量是不可变的。

常量

  • const 声明
  • 大写的字符
  • 明确的类型
  • 作用域(生命周期)中有效
  • 不能重复定义(shadow 特性)
const NUM: i32 = 123;

静态量(全局有效)

  • 全局有效
  • 单实例,指向同一个内存地址
  • 具有可变性,可使用 mut 关键字
static mut NUM:i32 = 100

变量与可变性

rust 的变量是原生支持可变性的(immutable),通过 mut 关键进行显示声明为变量可变:

fn main() {
    let mut a = 2;
    println!("a {}", a); // a 2
    
    a = 23;
    print!("a {} after", a); // a 23
}

rust 中变量 shadow 特性

在相同的作用域内可以重复的赋值

fn main() {
    let x = 123;
    let x = x + 123123;
}

数据类型

bit 单位是二进制单位和二进制数据的缩写,每一位二进制数据称之为一个比特。

标量类型

整数类型(integer type)

image.png

整数类型,我们需要知道的内容:

  • 有无符号
  • 长度
  • 范围 Range

比特:

  • 8 比特: (2的7次方)
    • u8 介于 0 - 255 之间,数据越界了(rust 发生恐慌 panic)
  • 16 比特(2 的 15 次方)
  • 32 比特(2 的 31 次方)
  • 64 比特 (2 的 63 次方)
  • 128 比特 (2 的 127 次发)
  • arch 计算机类型的体系结构(如果是64位体系结构,则为64位; 如果是32位体系结构,则为32位)

范围: Range(-2n-1 to 2n-1 - 1)

  • 进制关系

  • 十进制(123_368 使用下划线表示分隔符)

  • 十六进制

  • 八进制

  • 二进制

  • 字符

浮点型数据

单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。

双精度浮点数(double)是计算机使用的一种数据类型,使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是:-1.79E+308 ~ +1.79E+308

  • f32
  • f64

浮点数根据 IEEE-754 标准表示。f32 类型是单精度浮点数,f64具有双精度。

数学操作之加减乘除

  • addition
  • subtraction
  • multiplication
  • division
  • remainder

布尔类型 bool

let isShow: bool = true;

char 类型

let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '😻';

Rust 的char类型大小为四个字节,表示一个 Unicode 标量值,这意味着它可以表示的不仅仅是 ASCII。

复杂类型

Rust 有两种原始的复合类型:元组和数组。

元祖

let tup: (i32, f64, u8) = (500, 6.4, 1);

声明之后具有不可变性,长度,类型都不可变。

访问方式:1. 解构访问,2. 索引值访问

数组

let arr = [1,2,3,4,5,6];
  • 元素同类型
  • 固定长度
  • 分配在堆内存
  • 与向量的区别
  • 定义的特殊语法
  • 索引访问
  • 无效的越界访问会发生恐慌

函数

  1. 函数定义: fn 关键字定义一个函数
  2. 函数命名: 常用下划线的方式
  3. 函数参数:参数的类型
  4. 函数体:语句和表达式要符合 rust 语法
  5. 函数返回值: 单独的行 return

流程控制

  • if 表达式
  • loop 表达式
  • while 表达式
  • for-in 表达式

注释

使用// 进行表示注释:

  • 单独的注释行
  • 行尾部注释
  • 多行注释

所有权

  • 从字符串类型引出所有权的概念, rust 引出的所有权,主要是 字符串,操作之后数据的引用关系。
  • 函数的参数,函数返回值,都变量所有权的控制

什么是所有权

引用和借用

切片

结构体

枚举匹配模式

使用包和保包管理工具

通用集合类型

处理错误

泛型、trait与生命周期

测试

小结