您的 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)
整数类型,我们需要知道的内容:
- 有无符号
- 长度
- 范围 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];
- 元素同类型
- 固定长度
- 分配在堆内存
- 与向量的区别
- 定义的特殊语法
- 索引访问
- 无效的越界访问会发生恐慌
函数
- 函数定义:
fn
关键字定义一个函数 - 函数命名: 常用
下划线
的方式 - 函数参数:参数的
类型
- 函数体:语句和表达式要符合 rust 语法
- 函数返回值: 单独的行
return
流程控制
- if 表达式
- loop 表达式
- while 表达式
- for-in 表达式
注释
使用//
进行表示注释:
- 单独的注释行
- 行尾部注释
- 多行注释
所有权
- 从字符串类型引出所有权的概念, rust 引出的所有权,主要是 字符串,操作之后数据的引用关系。
- 函数的参数,函数返回值,都变量所有权的控制