Rust学习手册
文章平均质量分 96
A language empowering everyone to build reliable and efficient software.
Snasph
show me the money.
展开
-
00-Rust前言
Ask:为什么要近期想学习Rust?Answers: Rust出来也是有一段时间了,从Microsoft吵着要重构他们的C++"祖传代码"开始,Rust就披着“高效,安全”的头衔。而自己决定要学习Rust,是因为近期发现:涉及工作的部分开源代码也在悄然的发现变化。例如:Google在java端用Kotlin改写原有java代码,这个没有什么意外,毕竟Kotlin是Google的亲儿子。但是,最近发现Google也在修改native层的C/C++代码了.....一图胜千言!原创 2024-01-18 14:21:40 · 1200 阅读 · 0 评论 -
01-开始Rust之旅
官方推荐使用rustup下载 Rust,这是一个管理 Rust 版本和相关工具的命令行工具。下载时需要连接互联网。这边提供了离线安装版本。本人学习的机器环境为: ubuntu x86_64,因此选用第②个工具链;1.2.原创 2024-01-18 16:56:24 · 1920 阅读 · 2 评论 -
02-编程猜谜游戏
本章通过演示如何在实际程序中使用 Rust,你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。本章将实现一个经典的初学者编程问题:猜谜游戏。工作原理如下:程序将随机生成一个介于 1 和 100 之间的整数。然后,程序会提示玩家输入一个猜测。输入猜测值后,程序会显示猜测值是过低还是过高。如果猜测正确,游戏将打印一条祝贺信息并退出。原创 2024-01-19 12:15:05 · 1304 阅读 · 0 评论 -
03-常用编程概念
本章介绍几乎所有编程语言中都会出现的概念,以及它们在 Rust 中的工作原理。许多编程语言的核心都有许多共同点。本章介绍的概念都不是 Rust 独有的,但我们会在 Rust 的上下文中讨论这些概念,并解释使用这些概念的惯例。具体来说,将学习变量、基本类型、函数、注释和控制流。每个 Rust 程序中都会有这些基础知识,及早学习这些知识将为你的起步打下坚实的基础。Rust 语言与其他语言一样,有一组关键字仅供该语言使用。请记住,不能将这些关键字用作变量或函数的名称。原创 2024-01-21 10:59:19 · 1215 阅读 · 0 评论 -
04-了解所有权
所有权是一套管理 Rust 程序如何管理内存的规则。所有程序在运行时都必须管理它们使用计算机内存的方式。有些语言有垃圾回收功能,可以在程序运行时定期查找不再使用的内存(Java的垃圾回收机制);在其他语言中,程序员必须明确分配和释放内存(C/C++)。Rust 使用的是第三种方法:通过所有权系统管理内存,并由编译器检查一系列规则。如果违反任何规则,程序将无法编译。在程序运行过程中,所有权的所有特性都不会降低程序的运行速度。由于所有权对许多程序员来说是一个新概念,因此需要一些时间来适应。原创 2024-01-22 14:49:15 · 959 阅读 · 0 评论 -
05-使用结构体构建相关数据
结构体与 "元组类型 "一节中讨论的元组类似,都可以保存多个相关值。与元组一样,结构体中的数据也可以是不同的类型。与元组不同的是,在结构体中,我们会为每块数据命名,这样就能清楚地知道这些值的含义。添加这些名称意味着结构体比元组更灵活:您不必依赖数据的顺序来指定或访问实例的值。要定义结构体,我们需要输入关键字 struct并为整个结构体命名。结构体的名称应描述被组合在一起的数据块的意义。然后,在大括号内定义数据的名称和类型,我们称之为字段。例如,下列显示了一个存储用户账户信息的结构体。原创 2024-01-23 23:41:18 · 1546 阅读 · 0 评论 -
06-枚举和模式匹配
结构体提供了一种将相关字段和数据组合在一起的方法,如 Rectangle 及其 width 和 height ,而枚举则提供了一种表示某个值是一组可能值之一的方法。例如,我们可能想说 Rectangle 是一组可能的形状之一,其中还包括 Circle 和 Triangle。为此,Rust 允许我们将这些可能性编码为一个枚举。让我们来看看我们可能想在代码中表达的一种情况,看看为什么在这种情况下枚举是有用的,而且比结构体更合适。假设我们需要处理 IP 地址。原创 2024-01-24 12:12:16 · 1021 阅读 · 0 评论 -
07-使用Package、Crates、Modules管理项目
在本节中,我们将讨论模块和模块系统的其他部分,即允许命名项目的路径、将路径引入作用域的 use 关键字,以及使项目公开的 pub 关键字。我们还将讨论 as 关键字、外部包和 glob 操作符。首先,我们将列出一个规则列表,以便将来组织代码时参考。然后,我们将详细解释每一条规则。原创 2024-02-03 23:28:19 · 1295 阅读 · 1 评论 -
08-常用集合(容器)
我们首先定义一下字符串的含义。Rust 的核心语言中只有一种字符串类型,那就是字符串片str,它的借用形式通常是&str。在第 4 章中,我们谈到了字符串片,它是对存储在其他地方的UTF-8 编码字符串数据的引用。例如,字符串字面量存储在程序的二进制文件中,因此是字符串片。String 类型是由 Rust 标准库提供的,而不是编入核心语言的,它是一种可增长、可变、自有、UTF-8 编码的字符串类型。原创 2024-02-04 20:02:47 · 1232 阅读 · 0 评论 -
09-错误处理
让我们把使用 Rust 的类型系统来确保我们拥有一个有效值的想法向前推进一步,看看如何创建一个用于验证的自定义类型。回想一下第 2 章中的猜谜游戏,我们的代码要求用户猜一个 1 到 100 之间的数字。在将用户的猜测与我们的秘密数字进行核对之前,我们从未验证过用户的猜测是否介于这两个数字之间;我们只验证了用户的猜测是肯定的。在这种情况下,后果并不严重:我们输出的 "太高 "或 "太低 "仍然是正确的。原创 2024-02-06 16:18:09 · 1428 阅读 · 0 评论 -
10-通用类型、特质和生命周期
在定义使用泛型的函数时,我们通常会将泛型放在函数签名中指定参数和返回值数据类型的地方。这样做可以使我们的代码更加灵活,为函数的调用者提供更多的功能,同时防止代码重复。继续我们的 largest 函数,清单 10-4 显示了两个函数,它们都能找到切片中的最大值。然后,我们将把这两个函数合并为一个使用泛型的函数。println!清单 10-4:两个仅在名称和签名类型上不同的函数)原创 2024-02-16 17:47:25 · 1253 阅读 · 0 评论 -
11-编写自动化测试
作为 assert!和 assert_ne!宏的可选参数,您还可以添加要与失败信息一起打印的自定义信息。在必备参数之后指定的任何参数都将传递给 format!宏(在第 8 章 "使用 + 操作符或 format!宏进行连接 "一节中讨论),因此可以传递包含 {} 占位符和要在这些占位符中使用的值的格式字符串。自定义消息对于记录断言的含义非常有用;当测试失败时,你可以更好地了解代码的问题所在。format!("Hello {}!原创 2024-02-17 00:43:56 · 1200 阅读 · 0 评论 -
12-输入/输出项目构建命令行程序
测试驱动开发(TDD, test-driven development)是一种软件开发方法,即在实际代码执行之前编写测试。它是一种用于确保所开发的软件满足指定要求的技术,并有助于在开发周期的早期捕捉错误。该过程遵循一个短暂的重复周期,Red-Green-Refactor,即 "红-绿-重构":①. 红色编写一个定义函数或函数改进的测试,该测试最初失败的原因应该是函数不存在或不按预期执行。②. 绿色:编写通过测试所需的最少代码量。这一阶段的主要目标是在遵守指定要求的前提下尽快通过测试。原创 2024-02-17 21:49:44 · 1100 阅读 · 1 评论