当前位置:网站首页>Rust基础知识
Rust基础知识
2022-06-29 15:02:00 【用户1097444】
随着 Rust 语言的大火,前端圈里掀起了一股 Rust 风 —— 一切能用 Rust 实现的都在尝试使用 Rust 重写,比如最近很火的对标 Babel 的 JavaScript/TypeScript 编译器 swc,相信很多人都已经尝试过了。
对于我们前端来说,这么火的语言,当然不能放过了,必须跟上时代的潮流。
一、什么是 Rust
Rust 是由 Mozilla 主导开发的通用、编译型编程语言。设计准则为 “安全、并发、实用”,支持函数式、并发式、过程式以及面向对象的程序设计风格。 —— 维基百科
二、语言特点
1、语言特点
Rust 在深层语法上跟元语言家族的语言像是 Haskell 更接近。基本上一个函数体的每个部分都是表达式,甚至是控制流操作符。
2、内存安全
在安全代码里不允许空指针,悬垂指针和数据竞争。数值只能用一系列固定形式来初始化,要求所有输入已经被初始化。
3、内存管理
不使用自动垃圾回收系统,通过 RAII 来管理内存和资源,还可选引用计数。
4、所有权
所有的值都有一个唯一的属主,值的有效范围跟属主的有效范围一样。
5、类型多态
Rust的类型系统支持一种类似类型类的机制,叫“traits”,是被Haskell激发灵感的。这是一种用于特定同质法的设施,通过给类型变量声明添加约束来实现。其它来自Haskell的特性,如更高类型多态还没有支持,具体可查看:Rust 类型多态。
三、数据类型
Rust 总共有以下几种类型:整数型、浮点型、布尔型、字符型、复合类型。
1、整数型 (i、u)
Rust 语言的类型类似于 C 系列的语言,整形数据会根据是否有符号分为有符号和无符号类型。
位数 | 有符号 | 无符号 |
|---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
... | ... | ... |
整形默认类型是 i32。(i、 u 表示的是 int、uint)
let a = 10; // i32
let b: i64 = 20; // i642、浮点型(f)
Rust 与其它语言一样支持 32 位浮点数(f32)和 64 位浮点数(f64)。默认情况下,浮点型数据类型是 64 位浮点数,因为现代计算机处理器对两种浮点数计算的速度几乎相同,但 64 位浮点数精度更高。
let a = 10.0; // f64
let b: f32 = 20.0; // f323、布尔型 (bool)
与 js 一样,值为 true 或 false。
4、字符型 (char)
字符类型大小为 4 个字节,代表 Unicode 标量值。
注意:由于中文文字编码有两种(GBK 和 UTF-8),所以编程中使用中文字符串有可能导致乱码的出现,这是因为源程序与命令行的文字编码不一致,所以在 Rust 中字符串和字符都必须使用 UTF-8 编码,否则编译器会报错。
let c = 'a';5、复合类型
数组想必大家都很熟了,就是由中括号包括的一组相同类型的数据,但是我们需要知道的是,Rust 中的数组是固定长度的,也就是说我们不能在确定一个数组后再去进行新增或删除的操作。
let arr = [1, 2, 3, 4, 5];
let arr2: [i32; 5] = [1, 2, 3, 4, 5]; // 长度为5的i32数组
let arr3 = [1; 3]; // 等于[1, 1, 1]
let one = arr[0]; // 1Rust 还有一个元组类型,它可以包含不同的数据类型。
let tup: (i32, f32, char) = (10, 20.0, 'a');四、结构体
结构体有点类似我们 ts 中的 interface
struct Person {
name: String,
sex: String,
age: u32
}
let p1 = Person {
name: String::from("abc"),
sex: String::from("male"),
age:18
}
// 结构体更新语法,类似js的解构
let p2 = Person{
name: String::from("123"),
..p1
}五、枚举类
enum Phone {
IPhone, Huawei
}枚举类常常与 match 语法一起使用,用来实现分支结构,类似其他语法中的 switch,但是 Rust 中并不支持 switch。
fn main() {
enum Phone {
IPhone(u32),
Huawei {url: String},
}
let phone = Phone::IPhone(123);
let phone2 = Phone::Huawei {url: String::from("hahaha")};
match phone {
Phone::IPhone(i) => {
println!("{}", i);
},
Phone::Huawei { url } => {
println!("{}", url);
}
}
match phone2 {
Phone::IPhone(i) => {
println!("{}", i);
},
Phone::Huawei { url } => {
println!("{}", url);
}
}
}
// 123
// hahahamatch 除了能够对枚举类进行分支选择以外,还可以对整数、浮点数、字符和字符串切片引用(&str)类型的数据进行分支选择。
对非枚举类进行分支选择时必须处理例外情况,用下划线 _ 表示。
六、所有权
所有权是 Rust 语言为高效使用内存而设计的语法机制
所有权概念是为了让 Rust 在编译阶段更有效地分析内存资源的有用性以实现内存管理而诞生的概念。
// 移动
// 这种情况下无法访问第一个变量
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1); // 错误!s1 已经失效
// 克隆
// 这种可以
let s1 = String::from("hello");
let s2 = s1.clone();
println!("s1 = {}, s2 = {}", s1, s2);紧追技术前沿,深挖专业领域
扫码关注我们吧!
边栏推荐
- 揭秘百度智能测试在测试自动执行领域实践
- Draw a slash on a plane coordinate
- 技术沟通遇到3个为什么背后的逻辑
- Lumiprobe deoxyribonucleic acid phosphate CpG 1000 solid carrier
- 如临现场的视觉感染力,NBA决赛直播还能这样看?
- Yi Ming ang Ke rushed to Hong Kong shares: loss of 730million in the year Lilly and sunshine life insurance were shareholders
- You need to know about project procurement management
- MCS: discrete random variable Poisson distribution
- Huali biology rushes to the scientific innovation board: the annual revenue is RMB 226million and it is planned to raise RMB 800million
- Lumiprobe 活性染料丨氨基染料:花青5胺
猜你喜欢

Real software testers = "half product + Half development"?

Trigonometric function corresponding to drawing circle on plane coordinate

知识点:PCB线路板布线都有哪些诀窍?

Implementing redis distributed locks using custom annotations

Differential equations of satellite motion

ModStartBlog 现代化个人博客系统 v5.2.0 主题开发增强,新增联系方式

Const usage

Lumiprobe 脱氧核糖核酸丨磷酸盐 CPG 1000 固体载体

EMC surge protection and decoupling design

Unity C basic review 27 - delegation example (p448)
随机推荐
SOFARegistry 源码|数据同步模块解析
Lumiprobe 点击化学丨非荧光炔烃:己酸STP酯
Huali biology rushes to the scientific innovation board: the annual revenue is RMB 226million and it is planned to raise RMB 800million
Unity C# 基础复习26——初识委托(P447)
数据挖掘复习
LeetCode笔记:Biweekly Contest 81
Illustration of Ctrip quarterly report: net revenue of RMB 4.1 billion has been "halved" compared with that before the outbreak
CKS CKA CKAD 将终端更改为远程桌面
近期工作总结
mysql 备份与还原
西北工业大学遭境外电邮攻击
投资reits基金是靠谱吗,reits基金安全吗
Lumiprobe 活性染料丨杂染料:BDP FL 神经酰胺
深度学习遥感数据集
MCS: discrete random variable Poisson distribution
Informatics Olympiad all in one 2062: movie tickets
Trigonometric function corresponding to drawing circle on plane coordinate
这是少了什么依赖嘛?FlinkSql打包运行的时候报错,但是本地idea跑的时候是没问题的,求解,谢
Informatics Olympiad all in one 1000: introductory test questions
symfony框架安全组件(security)防火墙配置