从零开始学习Rust:一门安全、高效、并发的系统编程语言

576 阅读5分钟

Rust简介

Rust是一种现代的、安全的系统编程语言,它具有高效、并发和级别控制的特点。Rust的设计目标是提供一种可靠的编程语言,可以帮助开发人员写高性能、可维护和安全的软件。Rust的语法类似于C++,但它具有更强的类型安全性和内存安全性。

Rust的历史和发展

Rust最初由Mozilla的Graydon Hoare在2010年开发,最初是作为一种替代C++的语言。Rust的开发目标是提供一种可靠的编程语言,可以帮助开发人员写高性能、可维护和安全的软件。Rust的开发过程非常开放和透明,Rust的开发者们积极参与社区,与其他开发者分享他们的经验和知识。

Rust的特点和优势

Rust的特点和优势主要包括以下几个方面:

  • 安全性:Rust的所有权模型可以防止常见的内存错误,例如空指针引用和数据竞争。Rust的编译器可以执行更严格的类型检查,可以在编译时捕获更多的错误。这使得Rust的代码更加健壮和可靠。
  • 高效性:Rust的编译器可以生成高效的本地代码,可以与C++相媲美。Rust的所有权模型和借用机制可以避免不必要的内存分配和拷贝,从而提高代码的性能。
  • 并发性:Rust的所有权模型和借用机制可以避免数据竞争和死锁等并发问题。Rust的标准库提供了丰富的并发编程工具,可以轻松地编写多线程代码。
  • 可维护性:Rust的模块化和抽象机制可以帮助开发人员编写可维护的代码。Rust的编译器可以执行更严格的类型检查,可以在编译时捕获更多的错误,从而减少代码的维护成本。

Hello, world!

老规矩,学习一门语言先从Hello, world!开始

安装rust

linux/macOS使用以下命令行

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

该命令下载一个脚本并开始安装 rustup 工具,该工具会安装最新稳定版本的 Rust。系统可能会提示您输入密码。如果安装成功,会出现如下一行:

Rust is installed now. Great!

你可能还需要一个链接器,这是 Rust 用来将其编译输出连接到一个文件中的程序。你可能已经拥有一个。如果遇到链接器错误,你应该安装一个 C 编译器,它通常包含一个链接器。 C 编译器也很有用,因为一些常见的 Rust 包依赖于 C 代码并且需要 C 编译器。

在 macOS 上,可以通过运行以下命令获得 C 编译器:

$ xcode-select --install

根据发行版的文档,Linux 通常应该安装 GCC 或 Clang。例如,如果使用 Ubuntu,则可以安装 build-essential 软件包。

在windows上安装可以使用离线安装包的方式安装

检查是否安装成功

命令行输入

$ rustc --version

看到已发布的最新稳定版本的版本号、提交哈希和提交日期,格式如下:

rustc x.y.z (abcabcabc yyyy-mm-dd)

就表示已经安装成功,如果没有就检查环境变量

Windows CMD

> echo %PATH%

PowerShell

> echo $env:Path

linux/macOS

$ echo $PATH

升级和卸载

一旦通过 rustup 安装了 Rust,更新到新发布的版本就很容易了。从 shell 运行以下更新脚本:

$ rustup update

要卸载 Rust 和 rustup,从 shell 运行以下卸载脚本:

$ rustup self uninstall

创建项目

安装了 Rust,是时候编写第一个 Rust 程序了。传统做法是编写一个打印文本 Hello, world! 的小程序

打开终端并输入以下命令以创建项目目录和“Hello, world!”目录项目目录中的项目。

Linux、macOS、 PowerShell on Windows

$ mkdir ~/projects 
$ cd ~/projects 
$ mkdir hello_world 
$ cd hello_world

Windows CMD

> mkdir "%USERPROFILE%\projects" 
> cd /d "%USERPROFILE%\projects" 
> mkdir hello_world 
> cd hello_world

编写和运行 Rust 程序

接下来,创建一个新的源文件并将其命名为 main.rs。 Rust 文件总是以 .rs 扩展名结尾。如果在文件名中使用了多个单词,惯例是使用下划线将它们分开。例如,使用 hello_world.rs 而不是 helloworld.rs

现在打开刚刚创建的 main.rs 文件并输入以下代码:

fn main() { 
    println!("Hello, world!"); 
}

保存文件并返回到 ~/projects/hello_world 目录中的终端窗口。在 Linux 或 macOS 上,输入以下命令来编译和运行该文件:

$ rustc main.rs 
$ ./main 

在 Windows 上,输入命​​令 .\main.exe 而不是 ./main:

> rustc main.rs 
> .\main.exe 

输出

Hello, world!

Rust 程序剖析

剖析一下hello_world程序。这是第一部分:

fn main() {

}

这些行定义了一个名为 main 的函数。 main 函数很特别:它始终是每个可执行 Rust 程序中运行的第一个代码。此处,第一行声明了一个名为 main 的函数,该函数没有参数且不返回任何内容。如果有参数,它们将放在括号 () 内。

函数体包裹在 {} 中。 Rust 要求所有函数体都用大括号括起来。将左大括号与函数声明放在同一行是一种很好的风格,中间加一个空格。

main 函数的主体包含以下代码:

    println!("Hello, world!");

这一行完成了这个小程序中的所有工作:它将文本打印到屏幕上。这里有四个重要的细节需要注意。

  • Rust 风格是用四个空格缩进,而不是制表符
  • println! 调用 Rust 宏(后面章节讲)。如果它调用了一个函数,它将作为 println 输入(不带 !)
  • 我们将"Hello, world!"字符串作为参数传递给 println!,然后将字符串打印到屏幕上
  • 以分号 (;) 结束该行,表示此表达式已结束,下一个已准备好开始。大多数 Rust 代码行以分号结尾

编译和运行是分开的步骤

我们刚刚运行了一个新创建的程序,所以让我们检查一下该过程中的每个步骤。

在运行 Rust 程序之前,必须使用 Rust 编译器对其进行编译,方法是输入 rustc 命令并将源文件的名称传递给它,如下所示:

rustc main.rs

这类似于 gcc 或 clang。编译成功后,Rust 输出二进制可执行文件。

在 Linux、macOS 和 Windows 上的 PowerShell 上,您可以通过在 shell 中输入 ls 命令来查看可执行文件:

$ ls
main  main.rs

这显示了扩展名为 .rs 的源代码文件、可执行文件(在 Windows 上为 main.exe,但在所有其他平台上为 main),以及使用 Windows 时包含调试信息且扩展名为 .pdb 的文件。从这里,您可以运行 main 或 main.exe 文件,如下所示:

$ ./main

windows

> .\main.exe

结语

Rust 是一种提前编译语言,这意味着可以编译一个程序并将可执行文件提供给其他人,他们甚至可以在没有安装 Rust 的情况下运行它

仅使用 rustc 编译对于简单的程序来说很好,但随着项目的增长,我们需要管理所有选项并使其易于共享代码。下一篇,我们将介绍 Cargo 工具,它将帮助您编写真实世界的 Rust 程序。