Rust

Cargo简明教程

📅 2024-12-27

Cargo是Rust的包管理器和构建工具。

Cargo 简明教程

1.基本使用 #

1.1 帮助 #

运行cargo help列出cargo的可用命令,基于cargo的不同版本,以下输出内容可能会有不同:

...

用rust实现简单的双向链表

📅 2022-03-10

本文将通过实现一个简单的双向链表,理解Rust中的引用计数 (Rc)、引用单元 (RefCell) 和内部可变性 (Interior Mutability) 的概念。

双向链表是一种常见的数据结构,它允许我们在节点之间向前或向后遍历。为了实现双向链表,我们需要存储指向下一个和前一个节点的指针。然而,Rust的所有权系统会带来一些挑战。例如,因为简单使用引用(reference)可能会导致悬垂指针(dangling pointer)问题,这在Rust中是无法编译通过的。

...

用rust实现简单的单链表

📅 2022-03-09

作为初学者,在掌握了rust的基本语法和所有权机制,尝试写一下常见数据结构和算法,目标是为了更好的理解rust的所有权机制。 受限于个人目前对rust仍处于入门阶段,因此本文代码实现不一定是最合适的,甚至可能存在问题。

今天的目标是用rust实现一个简单的单链表LinkedList,同时为此链表提供从头部插入元素(头插法)、翻转链表、打印链表的功能。

...

Rust 1.58已经发布, 这些新特性需要我们关注

📅 2022-01-14

最近,Rust 1.58版本发布了,因为Rust新版本发布比较频繁,稳定版本大约每六周就会发布一次,所以每个版本的新特性不会太多。

如果你在以前已经通过rustup安装了Rust,可以通过下面的命令将Rust升级到1.58:

1rustup update stable

Rust 1.58的主要新特性包括:

...

rust语言基础学习: 并发中的原子操作和rus标准库中的原子类型

📅 2020-07-29

原子类型和原子操作 #

原子操作(atomic operation)是指不可分割且不可中断的一个或一系列操作,在并发编程中需要由CPU层面做出一些保证,让一系列操作成为原子操作。 一个原子操作从开始到结束可以是一个操作步骤,也可以包含多个操作步骤,这些步骤的顺序不可以被打乱,执行过程也不会被其他机制打断。

...

rust语言基础学习: 闭包

📅 2020-07-28

今天来学习rust中的闭包。

rust中的闭包实际上是一个匿名函数,这个匿名函数可以被赋值给一个变量,可以作为参数传递给函数,可以作为函数返回值被返回,也可以为它实现某个trait,使其表现出其他行为。 在rust中可以在一个地方创建闭包,然后在不同的上下文中执行闭包运算。不同于函数,闭包允许捕获调用者作用域中的变量。

...

rust语言基础学习: 写时克隆智能指针Cow

📅 2020-07-27

昨天学习了Rust中与借用数据相关的三个trait: Borrow, BorrowMutToOwned。 理解了这三个trait之后,今天来学习Rust中能够实现写时克隆的智能指针Cow<'a B>

1.Cow的定义 #

Cow是Rust提供的用于实现写时克隆(Clone on write)的智能指针。

...

rust语言基础学习: 与借用数据相关的三个trait Borrow, BorrowMut, ToOwned

📅 2020-07-26

今天学习Rust中与借用数据相关的三个trait: Borrow, BorrowMutToOwned。 这三个trait在Rust标准库module std::borrow中。

std:borrow是Rust标准库中用于处理借用数据的moudle。这个module中除了Borrow, BorrowMut, ToOwned三个trait 外,还有一个Cow enum。不过今天我们先只学习这三个trait。

...

rust语言基础学习: rust中的slice类型

📅 2020-07-25

今天来学习Rust中的slice类型。

为什么需要slice类型 #

为什么Rust会提供slice类型呢?

Rust中的借用(Borrow语义)可以将一个值在其所有权不发生转移的情况下,借给其他变量使用,借用通过创建引用来实现,Rust中创建引用的行为被称为借用。 但对于常用的集合类型例如Vec<T>, String(String的底层是Vec<u8>),这些集合类型的引用类型&Vec<T>, &String,引用的将是整个集合的内容。

...

rust语言基础学习: 使用ref关键字在模式匹配中通过引用进行绑定

📅 2020-07-24

今天来学习rust中的ref关键字。

由一个例子引出ref关键字的使用 #

先看下面的例子。

例1:

 1
 2#[derive(Debug)]
 3enum HttpMethod {
 4    Get(Get),
 5    Post(Post),
 6}
 7
 8#[derive(Debug)]
 9struct Get {
10    url: String,
11}
12
13#[derive(Debug)]
14struct Post {
15    url: String,
16    body: Vec<u8>,
17}
18 
19 fn main() {
20    let method = HttpMethod::Get(Get{
21        url: String::from("https://google.com"),
22    });
23
24    match  method  {
25        HttpMethod::Get(get) => println!("send get reuqest: {:?}", get),
26        HttpMethod::Post(post) => println!("send post reuqest: {:?}", post),
27    }
28
29    println!("{:?}", method); // 编译错误: borrow of partially moved value: `method`
30     
31 }

上面例1中在使用match表达式进行模式匹配时,在执行第25行或26行时method会发生部分移动(partially moved),根据rust所有权规则中的Move语义,method将失去所有权,因此在第29行无法再使用method变量,报了编译错误。

...

© 2025 青蛙小白 | 总访问量 | 总访客数