Rust初体验

Rust初体验

最近听闻Linux内核要加入Rust的支持,而且据说Rust这门语言既可以用于系统级别的开发又有现代高级语言的特质,并且没有C++那么臃肿,还可以实现内存安全,神乎其神的,所以特地安装了一个Rust学了一下

在Rust官网可以获取全套教程,包括安装等

在这篇文章里可以得到关于Rust的一些特性的介绍

下面主要介绍我对Rust的感受和体会

首先,印象深刻的是它的包管理工具Cargo,用起来很方便,美中不足是按tab键不知道为什么不能自动补全

cargo的功能很丰富,可以使用cargo new创建一个工程、用cargo checkcargo buildcargo run等进行编译运行有关的操作
更让人惊喜的是可以使用cargo fmt来对代码进行格式化而不必安装其他的工具
并且,使用cargo doc --open指令还可以在浏览器中打开详细的文档(这一点我觉得很有用)

Cargo的依赖管理也让人印象深刻
在工程根目录下有一个Cargo.toml的文件,大致格式类似:

[package]
name = "guess_num"
version = "0.1.0"
authors = ["yingmanwumen "]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.5.5"

有Makefile的那种感觉,在dependencies下面添加相关的依赖项,就可以自动维护相关依赖

Rust的语法特性也让人觉得很有趣
它的“Ownership”机制和“Shadowing”机制和其他的语言都不一样,让人印象很深刻

对于每一块内存空间,它都且只有一个自己的Owner
当一个变量赋值给另一个变量的时候,本质上是将这块内存空间的Owner移交,因此,原变量就失去了自己的内存空间,就变成了类似于C语言里的“野指针”的东西。这种指针是不允许被使用的,连编译都过不去——Rust的编译也让人觉得很有趣,提示很丰富,也很难编译成功。
为了让多个变量使用这个内存空间,一种解决方案是使用引用,或者叫借用——内存有可读权限和可写权限,一个变量可以借用另一个变量的权限

  • 对于一块内存,同时只能有一个可写引用存在
  • 对于一块内存,同时可以有多个只读引用存在
  • 对于一块内存,在有一个可写引用存在的时候,不能有其它引用存在,无论只读或者可写。
  • 引用的原始对象必须在引用存在的生命期一直有效

而Shadowing机制,则是指一个变量可以被多次声明,后面的声明将掩盖前面的声明,利用这个可以实现类型转化等其他功能

并且,Rust是面向对象的,但是又不全是面向对象
完全面向对象有好处,但是也有很多坏处,例如为了实现一个简单的功能不得不写很多代码,开销和代码量居高不下,而且纯面向对象也会导致其逻辑难以理解,要弄懂一个功能,很有可能要在多个类之间跳跃。

Rust的优点,我认为是安全、高效率、现代化、支持系统级编程,并且编译提示完善、社区生态好

Rust的缺点也很明显,它语法复杂,上手难度挺高的,虽然我觉得自己C语言学得还不错,但是在写简单的才数字游戏的时候还是数次迷茫、编译失败
而且它的编译时间确实挺长的

但是总的来说,它上手难,并不意味着上手之后还难,这一点比C++好
它语法复杂,但是比起C++,算得上简洁明了,起码它的语言特性可以使用几十个MD文档就说完,而C++永远都在往里面添加新的语言特性

C++矛盾的地方在于,既提供高级语言的特性,又把底层内存分配释放等让程序员来控制。这既是它的优点,又是它的缺点。既无法充分享受高级语言的便利,又要忍受冗余的代码量。但是C++又无所不能,基本上没有做不到的事情。

我认为,Rust很好地平衡了高级语言和系统级语言——这也是它设计的目的

你可能感兴趣的:(Rust,杂谈,rust)