C/C++程序员应当对堆栈的区别很熟悉,毕竟这是和操作系统/低层直接相关的概念。如Java等不需要考虑堆栈的语言,其实质(从某种意义上可以认为)是尽量使用堆而不用栈,但这样不可避免地带来了性能问题(计算和存储双方面的性能)。由于Rust目的是作为一门系统编程语言,故而其不能选择Java一类的方案;但同时,它也努力从语言中剥除堆栈的直接出现,以便降低概念的杂乱。
事实上,前文已经提过Rust对于剥除堆栈的努力之一:寿元。寿元的存在使得思考值是否有效时不需要同时考虑堆栈(操作系统特性)+作用域(语言特性)这两组有所重叠的概念,而仅需要考虑作用域和寿元的组合(皆为语言特性)。
在绝大多数时候,寿元和借用机制足以满足对堆栈的抽象。但仍然有个别时候会有绕不过去的必须将值分配在堆上的需求,这时候可以使用Box<T>
类型。
Box<T>
告诉编译器将值分配在堆上,然后返回这么一个对象(类似于一个智能指针)。提取值时和引用一样,使用*
来获取值。
(官方教程中有一个Box<T>
的例子。)
Backward links:
您可以在Hypothesis上的該群組內進行評論,或使用下面的Disqus評論。