Blog

rust语言基础学习: 使用From和TryFrom trait进行类型之间的转换

2020-07-20
Rust

昨天学习了Rust中trait的基础知识,今天开始将学习由Rust标准库中提供的经常会用到的trait。

在之前我们已经学习过了FromStr, Deref, DerefMut这3个trait,这里先做一个复习。

1.复习FromStr, Deref, DerefMut trait #

std::str::FromStr用于字符串slice str到其他类型的转换,一个名称为Point的类型实现了FromStr trait后,调用Point::from_str()就能完成从str到Point的转换,也可以使用str.parse()隐式调用的形式。 需要注意FromStr没有生命周期参数,因此只能解析本身不包含生命周期的类型。

...

rust语言基础学习: 使用trait定义接口

2020-07-19
Rust

trait类似于其他编程语言中的常被称为接口(interface)的功能,但还是有一些区别的。 trait告诉Rust编译器某个特定类型拥有可能与其他类型共享的功能。可以通过trait以一种抽象的方式定义共享的行为。可以使用trait bounds指定泛型是任何拥有特定行为的类型。

...

rust语言基础学习: rust中的错误处理

2020-07-18
Rust

今天开始学习rust中错误处理的内容。

Rust中的错误可分为 可恢复错误(recoverable)不可恢复错误(unrecoverable) 两个类别。

  • 可恢复错误通常代表向用户报告错误和重试操作是合理的情况,例如未找到文件
  • 不可恢复错误会导致程序崩溃,例如尝试访问超过数组结尾的位置

对比其他编程语言的错误处理:

...

rust语言基础学习: Deref和DerefMut trait

2020-07-17
Rust

前面我们学习了Box<T>, Rc<T>, RefCell<T>三个智能指针。 智能指针只是一种数据结构,它们的表现类似指针,同时有额外的元数据和功能。大多数智能指针拥有其所指向数据的所有权。 Rust中的智能指针通常使用结构体实现,其区别常规结构体的显著特征在于智能指针结构体会实现Deref trait和Drop trait,有的智能指针结构体还会实现DerefMut trait。

...

rust语言基础学习:智能指针RefCell<T>与内部可变性模式

2020-07-15
Rust

昨天学习了智能指针Rc<T>Rc<T>的使用场景是需要一个值有多个所有者的时候,这个场景出现在程序的运行时,Rc<T>是带有引用计数的智能指针,可以绕开编译器对所有权的静态检查。 Rc<T>内部使用了Box::leak将分配的堆内存泄露以绕开编译器对所有权规则的检查,泄露出来的堆内存不再受栈内存的自动管理,而是在运行时通过对引用计数的动态检查确保在合适的时机释放堆内存。

...

rust语言基础学习: 使用智能指针Rc<T>让值可以有多个所有者

2020-07-14
Rust

昨天学习了Rust中的智能指针Box<T>,使用Box可以强制将数据分配在堆上,然后栈上放一个指针指向并拥有这个数据,堆内存中数据的生命周期与栈上指针的生命周期一致。 智能指针Box<T>有三个使用场景:当有大量的数据,并且希望在确保数据不被拷贝的情况下转移所有权的时候;当有一个在编译时未知大小的类型,而又想要在需要确切大小的上下文中使用这个类型值的时候;当希望拥有一个值并只关心它的类型是否实现了特定 trait 而不是其具体类型的时候。

...

rust语言基础学习: 使用智能指针Box<T>将数据分配到堆上

2020-07-13
Rust

昨天学习了Rust中智能指针的概念,智能指针是Rust中一种数据结构,它的表现类似指针,同时有额外的元数据和功能。 大多数智能指针拥有其所指向数据的所有权,智能指针被分配到栈上,指向堆上的数据,实现了堆内存受栈内存生命周期控制,这样Rust通过所有权机制为堆上的值也引入了生命周期。 今天,我们将学习Rust标准库中的智能指针Box<T>

...

rust语言基础学习: 什么是智能指针

2020-07-12
Rust

学习Rust基础最重要的就是理解它的内存管理,前面我们学习了Rust赋值相关的Copy语义, Move语义, Borrow语义(引用和借用), 学习了Rust生命周期等知识。 这些概念都要围绕Rust如何管理内存来理解。本节开始将学习Rust中的智能指针

...

rust语言基础学习: 引用的生命周期

2020-07-11
Rust

前面学习了Rust的所有权规则、Move和Copy语义、引用和借用的知识,是时候学习Rust中关于引用有效性和生命周期的知识了。 在Rust中使用借用时必须遵循以下借用规则:

  • 引用不能超过值的生命周期
  • 在同一时刻一个值不能创建多个可变引用
  • 在同一时刻一个值已经创建了不可变引用,不能再为其创建可变引用

借用规则的第一条引用不能超过值的生命周期,就是本节我们要学习的生命周期,Rust的编译器通过对比值和其引用的生命周期,来确保满足这条规则。

...

© 2024 青蛙小白