我認爲Common Lisp中利弊細胞的大多數實現通常/總是堆上分配(見Why is consing in Lisp slow?)明確堆棧分配的數據
Common Lisp中確實提供用於從函數返回多個值的設施(返回時使用values
和在呼叫地點的multiple-value-bind
)。我在這裏猜測了一下,但我認爲這種結構的動機有兩方面:1)在不關心丟棄值的典型情況下,使truncate
等功能更易於使用; 2)使之成爲可能在不使用堆分配數據結構的情況下(取決於實現(?))返回多個值,完全避免堆(以及後來的GC開銷)。
Common Lisp(或者像SBCL這樣的特定實現)可以讓你使用堆棧分配的數據(可能與弱引用類似的東西)或者創建composite/large-ish值類型(類似於struct C)?
你可以用'DYNAMIC-EXTENT'聲明做堆棧分配。例如,請參閱SBCL手冊[6.2動態範圍分配](http://www.sbcl.org/manual/#Dynamic_002dextent-allocation)。 – jkiiski
請參閱[Common Lisp中的values函數](https://stackoverflow.com/a/22796346/850781)。 – sds