Learning Path
浏览 Rust 相关教程与章节。
主流编程语言、数据结构、设计模式、正则与基础算法。
教程
30
Rust 教程 Rust 是由 Mozilla 主导开发的高性能编译型编程语言,遵循“安全、并发、实用”的设计原则。 Rust 语言由 Mozilla 开发,首次发布于 2010 年。 Rust 支持多种编程范式,包括函数式、并发式、过程式和面向对象风格。 Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。 Rust 系列文章内容由 So..
Cargo 教程 在 Rust 开发中,几乎所有的项目都是使用 Cargo 来进行管理和构建的,因为它提供了便捷的工作流程和强大的功能,使得 Rust 开发变得更加高效和可靠。 Cargo 是什么 Cargo 是 Rust 的官方构建系统和包管理器。它主要有两个作用: 主要有两个作用: 项目管理:Cargo 用于创建、构建和管理 Rust 项目。通过 Cargo,你可以轻松地创建新项目,管理项目的依赖关系,并执行项目的构建、..
Rust 异步编程 async/await在现代编程中,异步编程变得越来越重要,因为它允许程序在等待 I/O 操作(如文件读写、网络通信等)时不被阻塞,从而提高性能和响应性。 异步编程是一种在 Rust 中处理非阻塞操作的方式,允许程序在执行长时间的 I/O 操作时不被阻塞,而是在等待的同时可以执行其他任务。 Rust 提供了多种工具和库来实现异步编程,包括 async 和 await 关键字、futures 和异步运行时(如 tok..
Rust 基础语法 变量,基本类型,函数,注释和控制流,这些几乎是每种编程语言都具有的编程概念。 这些基础概念将存在于每个 Rust 程序中,及早学习它们将使你以最快的速度学习 Rust 的使用。 变量 首先必须说明,Rust 是强类型语言,但具有自动判断变量类型的能力。这很容易让人与弱类型语言产生混淆。 默认情况下,Rust 中的变量是不可变的,除非使用 mut 关键字声明为可变变量。 let a = 123; // ..
Rust 闭包 Rust 中的闭包是一种匿名函数,它可以捕获并存储其所在环境中的变量。 闭包允许在定义作用域之外访问变量,并且可以在需要时将其移动或借用给闭包使用。 闭包在 Rust 中被广泛应用于函数式编程、并发编程和事件驱动编程等领域。 闭包与函数的区别 闭包和普通函数都能封装一段逻辑,但闭包多了一项核心能力——捕获外部环境中的变量。下表列出两者的主要差异: 特性闭包函数 匿名性没有名称,通常赋值给变量有固定的 fn ..
Rust 集合与字符串 集合(Collection)是数据结构中最普遍的数据存放形式,Rust 标准库中提供了丰富的集合类型帮助开发者处理数据结构的操作。 向量 向量(Vector)是一个存放多值的单数据结构,该结构将相同类型的值线性的存放在内存中。 向量是线性表,在 Rust 中的表示是 Vec<T>。 向量的使用方式类似于列表(List),我们可以通过这种方式创建指定类型的向量: let vector: ..
Rust 注释 Rust 中的注释方式与其它语言(C、Java)一样,支持两种注释方式: 实例 [mycode4 type='rust'] // 这是第一种注释方式 /* 这是第二种注释方式 */ /* * 多行注释 * 多行注释 * 多行注释 */ [/mycode4] 用于说明文档的注释 在 Rust 中使用 // 可以使其之后到第一个换行符的内容变成注释。 在这种规则..
Rust 并发编程 安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。并发(concurrent)的概念是指程序不同的部分独立执行,这与并行(parallel)的概念容易混淆,并行强调的是“同时执行”。并发往往会造成并行。本章讲述与并发相关的编程概念和细节。 线程 线程(thread)是一个程序中独立运行的一个部分。线程不同于进程(process)的地方是线程是程序以内的概念,程序往往是在一个进程中执行的..
Rust 条件语句 在 Rust 语言中的条件语句是这种格式的: 实例 [mycode4 type='rust'] fn main() { let number = 3; if number < 5 { println!('条件为 true'); } else { println!('条件为 false..
Rust 数据类型 Rust 语言中的基础数据类型有以下几种。 整数型(Integer) 整数型简称整型,按照比特位长度和有无符号分为以下种类: 位长度 有符号 无符号 ..
Rust 枚举类 枚举类在 Rust 中并不像其他编程语言中的概念那样简单,但依然可以十分简单的使用: 实例 [mycode4 type='rust'] #[derive(Debug)] enum Book { Papery, Electronic } fn main() { let book = Book::Papery; println!('{:?}', book)..
Rust 错误处理 Rust 采用了一种独特的错误处理机制,没有异常(Exception),没有 try/catch。它将错误分为两类,用不同的方式处理: 不可恢复错误(Unrecoverable):程序逻辑出了严重问题,使用 panic! 宏终止程序 可恢复错误(Recoverable):操作可能失败但可以处理,使用 Result<T, E> 枚举 这种设计迫使开发者在编译期就处理可能的错误,而不..
Rust 文件与 IO 本章介绍 Rust 语言的 I/O 操作。 接收命令行参数 命令行程序是计算机程序最基础的存在形式,几乎所有的操作系统都支持命令行程序并将可视化程序的运行基于命令行机制。 命令行程序必须能够接收来自命令行环境的参数,这些参数往往在一条命令行的命令之后以空格符分隔。在很多语言中(如 Java 和 C/C++)环境参数是以主函数的参数(常常是一个字符串数组)传递给程序的,但在 Rust 中主函数是个无参函数,环境参数..
Rust 函数 函数在 Rust 语言中是普遍存在的。通过之前的章节已经可以了解到 Rust 函数的基本形式: fn ( ) 其中 Rust 函数名称的命名风格是小写字母以下划线分割: 实例 [mycode4 type='rust'] fn main() { println!('Hello, world!'); another_function(); } fn anothe..
Rust 泛型与特性 泛型是一个编程语言不可或缺的机制。C++ 语言中用“模板”来实现泛型,而 C 语言中没有泛型的机制,这也导致 C 语言难以构建类型复杂的工程。 泛型机制是编程语言用于表达类型抽象的机制,一般用于功能确定、数据类型待定的类,如链表、映射表等。 在函数中定义泛型 这是一个对整型数字选择排序的方法: 实例 [mycode4 type='rust'] fn max(array: &[i32]) ..
Rust 简介 Rust 是一门由 Mozilla Research 主导开发的系统级编程语言,以内存安全、零成本抽象和无畏并发为核心设计目标。 Rust 诞生于 2006 年,最初是 Mozilla 员工 Graydon Hoare 的个人项目,后于 2009 年由 Mozilla 正式赞助并组建团队开发。 Rust 的设计初衷是解决 C/C++ 在系统编程中长期存在的痛点:内存安全问题(空指针、悬垂指针、缓冲区溢出)和并发编程的..
Rust 迭代器 Rust 中的迭代器(Iterator)是一个强大且灵活的工具,用于对集合(如数组、向量、链表等)进行逐步访问和操作。Rust 的迭代器是惰性求值的,这意味着迭代器本身不会立即执行操作,而是在你需要时才会产生值。 迭代器允许你以一种声明式的方式来遍历序列,如数组、切片、链表等集合类型的元素。 迭代器背后的核心思想是将数据处理过程与数据本身分离,使代码更清晰、更易读、更易维护。 在 Rust 中,迭代器通过实现 ..
Rust 生命周期 Rust 生命周期机制是与所有权机制同等重要的资源管理机制。之所以引入这个概念主要是应对复杂类型系统中资源管理的问题。 引用是对待复杂类型时必不可少的机制,毕竟复杂类型的数据不能被处理器轻易地复制和计算。但引用往往导致极其复杂的资源管理问题,首先认识一下垂悬引用: 实例 [mycode4 type='rust'] { let r; { let x = 5; ..
Rust 循环 Rust 除了灵活的条件语句以外,循环结构的设计也十分成熟。这一点作为身经百战的开发者应该能感觉出来。 while 循环 while 循环是最典型的条件语句循环: 实例 [mycode4 type='rust'] fn main() { let mut number = 1; while number != 4 { println!('{}..
Rust 宏 Rust 宏(Macros)是一种在编译时生成代码的强大工具,它允许你在编写代码时创建自定义语法扩展。 宏(Macro)是一种在代码中进行元编程(Metaprogramming)的技术,它允许在编译时生成代码,宏可以帮助简化代码,提高代码的可读性和可维护性,同时允许开发者在编译时执行一些代码生成的操作。 宏在 Rust 中有两种类型:声明式宏(Declarative Macros)和过程宏(Procedural Macro..
Rust 面向对象 面向对象的编程语言通常实现了数据的封装与继承并能基于数据调用方法。Rust 不是面向对象的编程语言,但这些功能都得以实现。 封装 封装就是对外显示的策略,在 Rust 中可以通过模块的机制来实现最外层的封装,并且每一个 Rust 文件都可以看作一个模块,模块内的元素可以通过 pub 关键字对外明示。这一点在“组织管理”章节详细叙述过。 “类”往往是面向对象的编程语言中常用到的概念。“类”封装的是数据,是对同一类数据实..
Rust 运算符 在 Rust 中,无论是简单的数值计算、逻辑判断,还是更复杂的模式匹配和位操作,运算符都承担着核心的角色。 Rust 既支持我们熟悉的 C 系语言常见运算符,也提供了一些独特的操作符号。熟练掌握这些运算符,不仅能让代码更简洁高效,也能帮助你更好地理解 Rust 的语义。 1、算术运算符 运算符 说明 示例 ..
Rust 所有权 计算机程序必须在运行时管理它们所使用的内存资源。大多数的编程语言都有管理内存的功能: C/C++ 这样的语言主要通过手动方式管理内存,开发者需要手动的申请和释放内存资源。但为了提高开发效率,只要不影响程序功能的实现,许多开发者没有及时释放内存的习惯。所以手动管理内存的方式常常造成资源浪费。 Java 语言编写的程序在虚拟机(JVM)中运行,JVM 具备自动回收内存资源的功能。但这种方式常常会降低运行时效率,所以 JVM..
Rust 输出到命令行 在正式学习 Rust 语言以前,我们需要先学会怎样输出一段文字到命令行,这几乎是学习每一门语言之前必备的技能,因为输出到命令行几乎是语言学习阶段程序表达结果的唯一方式。 在之前的 Hello, World 程序中大概已经告诉了大家输出字符串的方式,但并不全面,大家可能很疑惑为什么 println!( 'Hello World') 中的 println 后面还有一个 ! 符号,难道 Ru..