听说微软有开发者开始从事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,它的值是true和false。 - 所有浮点数类型,比如
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
}