Rust惑点启示系列(三):引用的生命期从来就不够长
代码被Rust编译器提示“引用的生命期不够长”是一件不管是刚开始学习Rust的新手还是Rust老手都经常能够碰到的事情。出现这种错误有方方面面的原因,而且不一定是我们的代码写错了。不过究根结底,这个问题还是跟生命期有关的。
代码被Rust编译器提示“引用的生命期不够长”是一件不管是刚开始学习Rust的新手还是Rust老手都经常能够碰到的事情。出现这种错误有方方面面的原因,而且不一定是我们的代码写错了。不过究根结底,这个问题还是跟生命期有关的。
从函数中返回一个值,看起来是非常简单的一个事情,不过在Rust里,就总是感觉不是那么简单。沿袭自其他语言的习惯,可能我们并没有意识到在一个函数里我们究竟返回了什么内容。但是在Rust这种“手动档”语言里,还就得认真的把它搞清楚。
在编写Rust程序的时候,发生未被注意的所有权转移是一件非常常见的事情,而能做出的修改也往往是Clone
一下。我们似乎从来没有想过这样解决所有权转移问题带来的后果。那么在这里就对如何选择使用Clone
的这个问题简单的讨论一下。
在入门Rust以后,会发现生命期(Lifetime)是一个比所有权机制更难以理解和掌握的机制。当我们磕磕绊绊的解决了程序里的所有权转移以后,就会发现Rust编译开始报出生命期的编译错误了。所以生命期机制是Rust中第二个劝退点,顺利攻克生命期的概念是使用和进入Rust编程大门的一个必经之路。
在根据Rust的所有权系统使用变量的时候,值通常会发生移动来改变其拥有者,这通常总是适用于Rust自有类型,但是Rust中的借用类型的表现就不一样了,因为在这些类型中存放的实际上是另一个内存区域的地址,而借用类型的变量一般并不拥有它所指向的那一片内存区域。这种行为上的区别,就构成了Rust中两种不同的类型:自有类型和借用类型。
Rust是一门新颖的系统编程语言,与传统的C/C++不同的是,Rust提供了更加完善和安全的内存管理机制。这也是Rust语言被熟知的天然内存安全和可靠并发的特征。Rust在实现这一系列特征的基础就在于其基于所有权(Ownership)、转移(Move)和借用(Borrow)机制打造的类型系统。但是这套机制系统的引入,却被很多人认为极大的提升了Rust的学习曲线。