Rust语言与内存安全设计(一)——入门介绍
根据《精通Rust(第二版)》的顺序进行记录
因为博主总在上课的时候困成狗,所以试图记录一下防止睡着,笔记可能看起来个人风格太强,也许还有未完成的部分,如果有时间的话改成阅读性更强的博客吧
也欢迎看到这篇笔记的人督促博主不要上课睡觉23333
2002.9.1 入门介绍
一些基本命令行
在powershell创建新项目: $cargo new [项目名]
编译源文件: rustc XX.rs
执行直接.\就可以
about Copy Opration:
// about Copy Opration:
let x: i32 =5;
let y=x;
println!("The value of x is{:?}",x);
println!("The value of y is {:?}",y);
// about Move Opration:
let x=String::from("hello");
let y=x;
println!("The value of x is{:?}",x);//会报错
println!("The value of y is {:?}",y);
let y: &String=&x; //不会报错
// immutable(不可改的) Borrow
let x=String::from("hello");
x.push_str(string:"world"); //会报错,因为是不可改的引用
let mut x=String::from("hello");
let y=&mut x;
println!("The value of x is{:?}",x);
println!("The value of y is {:?}",y); //会报错,不能出现两个可修改的指针
//value is deallocated
let y: &String;
{
let mut x: String=String::from("hello");
y=&x;
}
println!("The value of y is {:?}",y); //会报错,因为生存周期不对
关于Rust的内存安全性:
栈内存与堆内存的区别:确定大小vs内存动态变化
Owner原则:一个值只有一个所有者,一个值在任一时刻都只有一个拥有者,当所有者离开后值自动丢弃
出现数据竞争的三种行为:两个指针同时访问同一数据,至少有一个指针用于写入数据,没有使用任何机制来同步对数据的访问