This article is part of the Rust學習筆記 series.

C/C++程序員應當對堆棧的區別很熟悉,畢竟這是和操作系統/低層直接相關的概念。如Java等不需要考慮堆棧的語言,其實質(從某種意義上可以認爲)是儘量使用堆而不用棧,但這樣不可避免地帶來了性能問題(計算和存儲雙方面的性能)。由於Rust目的是作爲一門系統編程語言,故而其不能選擇Java一類的方案;但同時,它也努力從語言中剝除堆棧的直接出現,以便降低概念的雜亂。

事實上,前文已經提過Rust對於剝除堆棧的努力之一:壽元。壽元的存在使得思考值是否有效時不需要同時考慮堆棧(操作系統特性)+作用域(語言特性)這兩組有所重疊的概念,而僅需要考慮作用域和壽元的組合(皆爲語言特性)。

在絕大多數時候,壽元和借用機制足以滿足對堆棧的抽象。但仍然有個別時候會有繞不過去的必須將值分配在堆上的需求,這時候可以使用Box<T>類型。

Box<T>告訴編譯器將值分配在堆上,然後返回這麼一個對象(類似於一個智能指針)。提取值時和引用一樣,使用*來獲取值。

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

Renyuneyun

Arch Linux用戶;閒暇時爲FLOSS做做貢獻;認同自由軟件理念。自認唯物論者;反對任意形式的迷信;在意社會問題;拒絕先入爲主。

Renyuneyun

Join the discussion