每年,开发者问答网站 Stack Overflow 都会对程序员社区展开年度调查,包括他们最喜爱的技术到工作偏好的所有内容。 在 2017 年和 2018 年 Stack Overflow 年度开发者调查中,Rust 语言已经连续两年成为最受欢迎语言 Top 1。


Rust 语言有哪些特别之处呢?下面,我给大家简单介绍一下这门语言。



01 Rust 语言简介



首先上一段 Hello World 的代码:

fn main() {
    println!("Hello World!");
}

类似于 C 语言,这个简单程序定义了一个 main 函数,该函数是该程序的指定入口点(而且每个程序都有一个)。该函数使用 fn 关键字后跟括号 () 中的一组可选参数来定义。花括号 {} 标示该函数的边界,这个函数包含对 println! 宏的一次调用,根据该字符串参数的定义,这会向控制台发出格式化的文本 stdout

相对于前辈产品,Rust 是一种较新的语言,但它的血统造就了它的多模式方法。Rust 被视为一种类似 C 的语言,但它包含的其他特性带来了相较其前辈产品的优势

Rust 是一个由 Mozilla 主导开发的新兴语言,其官方网站介绍如下:

Rust is a modern systems programming language focusing on safety, speed, and concurrency. It accomplishes these goals by being memory safe without using garbage collection.



02 Rust 语言特性


Rust 有着需要优秀的特性,例如:

  • 可重用模块
  • 内存安全和保证(安全的操作与不安全的操作)
  • 不可恢复和可恢复的错误处理特性
  • 并发性支持
  • 复杂的数据类型(称为集合)

如果与我们比较熟悉的 C++ 相比的话,Rust 可以比较的地方太多了,这里我们仅仅举一个比较简单的部分(模块引入)来看,在 C++ 中我们可能会需要以下头文件:

#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <string>
#include <algorithm>
#include <bitset>

而如果要在 Rust 中完成的话,我们只需要:

use std::io::prelude::*;
use std::{fs, io, env, process};

Rust 提供大量默认的标准库。上面的代码中,就第一行,就 use 了一堆模块,这一点和 Python 的 import xxx 比较相似,此外:

C++ 还是那个老问题:惯用法。析构函数、拷贝构造函数。写对了没有。单线程下是对的,也许多线程就错了。要知道你可能从前写好了基础库,没有完整测试它在高并发下的表现,继续用可能就出错了(数据错误、内存访问错误)。Rust 呢?Rust 有一套基础设施(borrow checker), 从语义上检查了跨线程共享。

对 Rust 来说,编译器保证指出你的错误,对 C++ 来说,编译器没有这种保证,它也无法保证。



03 Rust 语言应用


在我们决定加入一个语言的“宗教”前,我们先来看看 Rust 已经做到了哪些,可以给我们带来哪些优秀的实用工具:

mdBook

一个可以将 Mardown 文档生成类似文档库的工具,mdBook 和 Rust 的所有文档就是通过 mdBook 完成的。

i3status-rust

对于 i3 窗口管理器适用的一个状态栏显示工具,使用 Rust 编写,非常易扩展。



Rust 编译器执行内存安全保证和其他检查,让该编程语言变得很安全。所以,在 Rust 中,永远不必担心悬空指针,或者担心在释放对象后使用它。这些是核心 Rust 语言的一部分。

虽然目前还没有针对 Rust 成熟的 IDE,但是在 LeetCode Playground 中,我们已经率先开启了针对 Rust 的支持,使用 Rust 1.31.0。

要入门 Rust?可以参考 Rust 官方的一个非常易懂的 Rust by Example ,通过学习网站上的例子并且在 LeetCode Playground 上进行尝试,Rust 可以很快入门,当然,如果要精通的话就需要大量的练习啦。