这一章节将 Rust 的知识划分成小块,每一块描述一个概念。如果你想从下至上的学习 Rust,按照顺序阅读本教程是个比较好的方法。这些部分也为每个概念生成了索引,所以如果你阅读另一个教程,发现让你困惑的,你也可以在这里找到关于它的解释。
Rust 项目使用一个叫做“发布渠道”的概念来管理版本的发布。理解这个过程从而决定你的 Rust 程序应该选择哪个版本是很重要的。综述Rust 中的发布有三种:NightlyBetaStableNightly 版本指的是每天更新一次。每隔六周,Nightly 版本会晋升为 “Beta” 版。在这一点上,它只会收到补丁修复严重错误。六周后,Beta 版提升为 “Stable” 版,并成为下一个 1. x 版本。
Borrow 和 AsRef 特性是非常相似的,但是也有些区别。这里有一个简单回顾一下这两个特质是什么意思。BorrowBorrow 特性是当你写一个数据结构时,并且你想要使用一个 owned 或 borrowed 类型作为用于某些目的的同义词。例如,HashMap 的 get 方法就使用了 Borrow: fn get<Q: ?Size>(&self, k:&Q) -> Option<&V> where K:Borrow<Q>
引言本指南将使用 snappy 压缩/解压库作为引言来介绍编写绑定外部代码。Rust 目前无法直接调用 c++ 库,但是 snappy 包括 C 的接口(记录在 snappy-c.h)。下面是调用外部函数的一个例子,如果你的机器安装了 snappy 它将能够编译通过:extern crate libc;use libc::size_t;
不管是人是鼠,即使最如意的安排设计,结局也往往会出其不意。《致老鼠》 罗伯特·彭斯有时候,事情会出乎意料的发生错误。重要的是要提前想好应对错误的方法。Rust 有丰富的支持错误处理方法来应对可能(老实说:将会)发生在您的程序中的错误。主要有两种类型的错误可能发生在你的程序中:故障和异常。让我们谈谈两者之间的区别,然后讨论如何处理它们。
并发性和并行性在计算机科学中是非常重要的主题,即使在当今工业中也是个热门的话题。电脑得到了越来越多的核心,然而,很多程序并没有能力来利用它们。Rust 内存安全特性同样采用了并发的方式。甚至 Rust 程序内存必须是安全,没有数据之间的竞争。Rust 的类型系统的任务就是给你强大的方式让程序能够在编译时并发执行。
下面我们来探讨一下循环问题。还记得 Rust 的 for 循环吗?下面有一个例子:for x in 0..10 { println!("{}", x);}现在你已经知道了更多的 Rust,我们可以详细谈谈它是如何工作的。范围 (0 . . 10) 是一个迭代器。我们可以使用 .next() 方法反复调用迭代器,它给出了事情的一个序列。如下所示:let mut range = 0..10;loop { match range.
文档是软件项目的重要组成部分,而且它在 Rust 中是第一位的。让我们看看怎么使用 Rust 给出的工具来记录你的项目。关于 rustdocRust发行版包含一个工具 rustdoc,它可以生成一个文档。rustdoc通常也被 Cargo 通过 cargo doc 来使用。文档可以通过两种方式生成:从源代码生成,或者从独立的 Markdown 文件生成。
Rust 有一个特殊属性 #[cfg],它允许你编译基于标志的代码并传递给编译器。
程序测试是一个非常有效的方法,它可以有效的暴漏程序中的缺陷,但对于暴漏缺陷来说,这还是远远不够的。—— Edsger W. Dijkstra,"卑微的程序员" (1972)让我们来谈谈如何测试 Rust 代码。我们将谈论不是什么测试 Rust 代码正确的方法。关于正确和错误地编写测试的方式有很多的流派。所有这些方法都使用相同的基本工具,因此,我们将向您展示使用它们的语法。
作为一种系统语言,Rust 运行在较低的层次。如果你只学习过高级语言,有一些系统编程方面的问题,你可能不熟悉。最重要的一个问题是存储器如何工作,例如如何使用堆和栈。如果你对 c 语言如何使用堆栈分配熟悉的话,本章将会是一个复习。如果你不熟悉的话,你将会学习到Rust-y 关注的一些相关基本概念。内存管理关于内存管理有两个常用术语。
现在你已经学会了如何编写一些 Rust 代码。但是在编写出 Rust 代码和编写出良好的 Rust 代码,还是有一定区别的。这部分由相对独立的教程向您展示如何把 Rust 发展到下一个水平。将介绍常见的模式和标准库特性。你可以按你选择的任何顺序来阅读这些章节。
我们的第三个项目,我们要选择展示那些能展示 Rust 最大优点的点:大量运行时的减少。随着我们组织的发展,其越来越依赖其他的一些编程语言。不同的编程语言有不同的优点和缺点,通晓数种语言的堆栈允许你使用一个特定的语言,在其的优势方面,而在其弱势的方面,你可以使用另一种语言。许多程语言一个共同薄弱的地方就是程序的运行时性能。
对于我们的第二个项目,让我们来看一个典型的并发性问题。这就是“哲学家就餐问题”。这最初是由迪杰斯特拉在 1965 年提出的,但我们将要使用的版本出自托尼•霍尔在 1985 年发表的一篇论文。在古代,一个富有的慈善家捐赠了一所学院来安排五个著名的哲学家。每个哲学家都有一个房间,他可以在其中从事他自己专业的思考活动;
我们的第一个项目,将实现一个典型的初学者编程的问题:猜谜游戏。下面介绍下它是如何工作的:我们的程序将生成一个从一到一百的随机整数。然后它会提示我们输入一个猜测值。依据我们的输入的猜测值,它会告诉我们猜测值是否过低或者过高。一旦我们猜正确,它将祝贺我们。听起来不错吧?设置进入你的项目目录,让我们建立一个新项目。
欢迎学习本节!本节有几个教程,通过构建项目教你 Rust。你将会得到一个高度概览,而我们会掠过细节部分。如果你更想喜欢一个“从头开始”风格的学习经历,请学习“语法和语义”。
Cargo 是 Rustaceans 用来帮助管理他们的 Rust 项目的一个工具。Cargo 目前处在 pre-1.0 状态,所以它仍然是一项正在进行中的项目。然而,它已经足够用于许多 Rust 的项目,所以我们就假设 Rust 项目从一开始就将使用 Cargo。Cargo 管理三个方面的事情:构建代码,下载代码所需要的依赖,构建这些依赖项。前期阶段,你的程序没有任何的依赖,所以我们只使用其功能的第一部分。
现在,你已经安装好了 Rust,让我们开始写第一个 Rust 程序。任何新的语言,按照惯例,让你写的第一个程序就是打印文本“Hello,world!“到屏幕上。从这样一个简单的程序开始的好处是,你可以验证你的编译器不只是安装好了,而且其工作也是正常的。打印信息到屏幕上是一个很常见的事情。首先,我们需要做的就是创建一个能让我们写入代码的文件。
使用 Rust 的第一步当然是安装它,有许多方法来安装 Rust,但其中最简单的方法是使用 rustup 脚本。如果你使用的是 Linux 或 Mac,所有你需要做的就是这些(请注意,你不需要输入 $,它们只显示每个命令的开始): $ curl -sf -L https://static.rust-lang.org/rustup.sh | sh如果你担心使用 curl | sh 所潜在的不安全,请继续往下看我们的免责声明。
此教程的第一部分将会让你初步了解 Rust 及其工具。首先,我们将安装 Rust。然后,学习典型的 “Hello World” 程序。最后,我们将讨论下 Cargo,Rust 的构建系统和包管理器。
关注时代Java