Rust语言基础入门学习记录

听说微软有开发者开始从事C#转Rust语言,想简单学习下非GC的软件开发,做到能看得懂代码。这篇也是跟随微软的文档做的个人理解和记录,Git链接https://github.com/microsoft/RustTraining,该仓库包含多本"桥梁书",涉及C#、Python、C++等转Rust的一些文档资料:

另有 独立的在线指南,由微软官方维护C#/.NET 开发者编写的 Rust 指南https://microsoft.github.io/rust-for-dotnet-devs/latest/

Rust入门指南,该中文版由Rust中文项目组维护,持续跟随官方版本更新,简体中文版https://rustwiki.org/zh-CN/book/

有这几个文档,入手的话应该够了,这里记录的是看这几个文档中的一些思考记录。

1.安装环境 ,环境的安装windows需要访问 安装 Rust - Rust 程序设计语言 页面并按照说明安装 Rust,安装完成后在命令行输入rustc --version将能够看到版本信息

2.Rust 文件通常以 .rs 扩展名结尾,联系C#是.cs结尾,java就是.java结尾,Python是.py结尾

3.基础数据类型相差不大 ,整型多个128位的Int128和UInt128。注意Rust中一个字符是4字节 Unicode,不再是两个字节UTF-16 encoding,新的语言为了适应更多场景扩大了字节。

4.Rust去掉了类的概念 ,保留了结构体struct,不必太在意继承和多态,通过traits 类似于接口实现,因此没有等价于protected关键字

5.Rust标准也注重简写,其本身的关键字也是简写,public被简写成了pub,function简写为fn,接口实现为impl,

6.Cargo 是 Rust 的构建系统和包管理器,前面安装时会附带安上,其作用类似maven之于springboot、npm之于node.js、pip之于python

7. Rust 中,变量默认是不可变 。一旦一个值绑定到一个名称, 变量的值不能更改。变量可以通过以下方式使变量 动,在变量名前添加 mut表示该变量定义的可变型变量:let mut x = 5; x = 6;

**8.作为新语言,融合了各种语法糖。**为了降低歧义,保留了分号;作为一行代码的结束符,没有像python、typescript那样。申明变量用let,类比C#中var。

9.代码中::不是继承,因为没有继承,我的理解其含义类似"来源于",也可用作大的库引用。

10.所有权机制使 Rust 无需垃圾回收器,也能提供内存安全保证。无需像C#和Java需要GC,C++需要亲自分配和释放内存。入栈比在堆上分配内存要快,因为其位置总是在栈顶,而堆上分配内存分配器必须首先找到一块足够存放。当代码调用一个函数时,传递给函数的值和函数的局部变量被压入栈中,当函数结束时,这些值被移出栈。

11.所有权规则:Rust 中的每一个值都有一个 所有者(owner);值在任一时刻有且只有一个所有者;当所有者离开作用域,这个值将被丢弃。

12.以下类型可以实现所有权的copy(我的理解就是值类型):

  • 所有整数类型,比如 u32
  • 布尔类型,bool,它的值是 truefalse
  • 所有浮点数类型,比如 f64
  • 字符类型,char
  • 元组,当且仅当其包含的类型也都实现 Copy 的时候。比如,(i32, i32) 实现了 Copy,但 (i32, String) 就没有。

这个代码很有说明性:

rust 复制代码
fn main() {
    let s = String::from("hello");  // s 进入作用域
    takes_ownership(s);             // s 的值移动到函数里 ...
                                    // ... 所以到这里不再有效
    let x = 5;                      // x 进入作用域
    makes_copy(x);                  // x 应该移动函数里,
                                    // 但 i32 是 Copy 的,
    println!("{}", x);              // 所以在后面可继续使用 x
}