动漫网站建设规划书模板中国网络推广网站排名
rust和其他语言一样除了基本的整型、浮点型、布尔、字符外也有复合类型、集合类型等复杂类型
1.复合类型数组和元组
数组不用过多介绍,但元组不是所有语言都有,目前我学的语言只有python,rust有这个类型
与数组相比相同点:都是复合类型、长度都是固定的,不同点在于元组可以是不同类型的数据类型,数组必须同一类型的数据类型。
数组声明与使用
fn main() {//声明 a 是一个长度为 5 的整型数组let a = [1, 2, 3, 4, 5];//声明b 是一个长度为3的字符串数组let b = ["python", "go", "rust"];// 等同于 let c = [3, 3, 3, 3, 3];let c = [3; 5];//访问println!("{}",a[0]);//a[0] = 123; //同样如果没有mut:数组 a 不可变,不可改变里面的值let mut a = [1, 2, 3]; //加了mut才能修改a[0] = 4; // 正确//循环遍历for i in a.iter() {println!("值为 : {}", i);}
}
元组声明与使用
fn main() {//声明一个元组tuplelet tuple = (1, "beijing", true, 0.9);//访问println!("{}", tuple.0);/*元组不可遍历和切片(这点与python中的元组有很大不同)Rust中的元组不能直接进行遍历。元组是一个固定长度的、可以包含不同类型元素的复合类型。不能使用for循环直接遍历元组,因为元组没有实现Iterator trait。元组也不能像数组那样进行切片操作。只能通过索引来访问元组中的单个元素,索引从0开始,使用点号(.)来访问,例如:tuple.0,tuple.1等。如果你需要遍历或切片操作,有以下替代方案:1.如果需要遍历,可以将元组转换为数组(要求数据类型相同)2.如果元素类型相同,考虑使用数组或Vec替代元组3.可以使用模式匹配来一次性获取多个元素*/// 使用模式匹配解构元组let(a,b,c,d) = tuple;println!("a: {}, b: {}, c: {}, d:{}", a, b, c, d);}
2.内存管理模型
其他语言内存管理方式
1.C/C++ 纯手工管理内存(缺乏安全抽象模型),容易出错
2.以Java/Python/Go等于语言,采用gc管理:垃圾回收,虽然内存安全,
但是有(stop the world),对性能影响非常大
rust语言内存管理方式
1.考虑性能,借鉴c++的rall资源管理方式
2.考虑安全:增加所有权语义
所有权的三大核心规则
1.每个值有且只有一个所有者
值在任意时刻只能被一个变量拥有,所有者负责值的生命周期。
2.所有者离开作用域时,值会被自动释放
通过 Drop trait 自动调用清理代码(如释放内存)。
3.所有权可通过赋值或函数传递转移(Move)
赋值 let x = y; 或传参会转移值的所有权,原变量将失效(编译器确保安全)。