Rust的使用感想

在之前和朋友闲来无事的时候看到KCP特别火,然后我们决定做一个RUST版本的COPY。于是就有了 https://github.com/freedomio/kcp
虽然后面没做下去,但是在写的过程中,算是有一些感想把,所以想把写下来。

CARGO

RUST的包管理器cargo简直是我建国最好用的包管理器,Golang的和这个比起来就是渣渣。
可以通过curl -sS https://static.rust-lang.org/rustup.sh | sudo bash来获得。

Rust的开发目的是用来取代C/C++,以无GC和以所有权和生命周期来保证内存安全,以Safe与Unsafe严格区分来避免C/C++的裸指针乱飞的情况。
而这两个东西带来的就是写Rust的时候,被编译器折磨,导致了Rust的难以入门。在写的过程中,大概发现有以下几个地方会很难适应

所有权

    let a = vec![1,2,3];
    let b = a;
    println!("value:",a[0])

这样的代码会报错,因为RUST所有权,一个对象,同一时间只能被一个持有,当let b = a的时候,就把这个vec的所有权由a转移到了b,
你可以通过一个copy的trait来改变这一行为,
从某种程度上说,这有点像C++的拷贝构造函数,如果没有实现拷贝构造函数,会导致内存泄漏,但是RUST通过所有权强制了这一过程,
这也是RUST的设计理念,就是就是SAFE的地方是绝对SAFE,你只需要关注UNSAFE的地方即可。

引用

在RUST中,引用分为可变以及不可变,分别是&a 和 &mut a。在一个作用域之中,只能存在一个可变引用,或者多个不可变的引用。同时,如果
存在可变引用,则不可以有不可变引用。好像有点拗口,换句话说,同一时间只能有一个指针写对象

生命周期

在RUST中,每个引用都有一个生命周期,当然,是可以省略的,如果一个引用的生命周期很清晰,编译器能推断的出,则
不需要手动添加,生命周期是一个描述性的语法,目的是告诉编译器。生命周期避免了出现悬挂指针的问题,保证了你使用一个引用的时候,它一定
是存在的。好吧。这部分有点复杂,实际上我用起来也是晕晕的,一直与编译器作斗争

文章目录
  1. 1. CARGO
  2. 2. 所有权
  3. 3. 引用
  4. 4. 生命周期