rust学习(二)所有权和生命周期

Li Guangqiao - 15/07/2023

Rust

Rust所有权机制

Rust语言引入所有权机制的目标

主要为解决复杂系统中的资源管理和悬吊引用问题。

所有权系统Rust中用于管理内存的手段。

所有权规则总结归纳:

结论:Rust的值被唯一的对象管理着,一旦不使用,内存就会立刻释放。

所有权简单实验

  1. 借用

    let x = String::from("hello");
    let y = &x;
    
  2. 克隆

    let x = 10;
    let y = x;
    println!("测试通过{x},{y}");
    //测试通过10,10
    let a = "hello";
    let b = a;
    println!("测试通过{x},{y}");
    let c = (1,2 as f64,"hello");
    let d = c;
    println!("测试:{:?},{:?}",c,d);
    let g = d.clone();
    

生命周期

静态生命周期***'static和动态生命周期'a***

静态生命周期在整个程序中期间存活

动态生命周期,相关参数的生命周期以相对长生命周期的引用为准

fn lifetime_test_one() -> &String{
        let x= "hello".to_string();
        print!("{x}");
        &x
}
//error missing liftime...
//改成使用一个生命周期都声明为'a的参数y来承接x的值
fn lifetime_test_one<'a>(y:&'a mut String) -> &String{
        let x:String = String::from("hello");
        print!("{x}");
        *y = x;
        y
}
Li Guangqiao
Li Guangqiao

一个正在转rust的ExtJs前端工程师。迷信rust的整体发展,十分相信rust在各个领域都能发光发热,至少目前rust在很多领域上验证了其安全性、易维护性。但说实话对于我这种菜鸡也是真的难上手哈哈哈~~。 思路总结:

  • 万物诞生都会有一个需求来源,每一个改变都是为了解决某个问题,最后应该考虑如何去做
  • 学会掌握一些宏观的知识和理论:系统论、还原论
  • 工程化思想,如何描述整体,从整体架构到模块关联等 故学习东西应该像看地图一样,先看整体了解整体的结构,然后再聚焦每一个模块,对于模块的学习,思考三个问题,“是什么?”、“为什么?”、“怎么做?”;那么设计一个东西时也应该去考虑整体性和关联性。

有关于未来的发展,以下是鄙人的粗浅的观点:

  • 编程语言未来应该是每个人必备的工具
  • 未来的交互方式应该会以语言交互为主流
  • 下一个去中心化的技术方案出来之前,区块链依然是web3建立价值体系的基础技术方案,如何将现实价值和虚拟价值联通是进入数字世界的一个大难题。
  • 未来注定是AI的世界。AI的进化会伴随绝大部分人的退化,届时除了尖端人才,人们学习的重心会放在何处?