Rust学习笔记/堆栈在Rust中的映像

renyuneyun 2019年06月25日(周二) 1 mins

C/C++程序员应当对堆栈的区别很熟悉,毕竟这是和操作系统/低层直接相关的概念。如Java等不需要考虑堆栈的语言,其实质(从某种意义上可以认为)是尽量使用堆而不用栈,但这样不可避免地带来了性能问题(计算和存储双方面的性能)。由于Rust目的是作为一门系统编程语言,故而其不能选择Java一类的方案;但同时,它也努力从语言中剥除堆栈的直接出现,以便降低概念的杂乱。

事实上,前文已经提过Rust对于剥除堆栈的努力之一:寿元。寿元的存在使得思考值是否有效时不需要同时考虑堆栈(操作系统特性)+作用域(语言特性)这两组有所重叠的概念,而仅需要考虑作用域和寿元的组合(皆为语言特性)。

在绝大多数时候,寿元和借用机制足以满足对堆栈的抽象。但仍然有个别时候会有绕不过去的必须将值分配在堆上的需求,这时候可以使用Box<T>类型。

Box<T>告诉编译器将值分配在堆上,然后返回这么一个对象(类似于一个智能指针)。提取值时和引用一样,使用*来获取值。

官方教程中有一个Box<T>的例子。)

Backward links:

您可以在Hypothesis上的該群組內進行評論,或使用下面的Disqus評論。