2013-05-01 68 views
0

我正在学习Erlang,所以这是一个提高我对Erlang设计选择的理解的问题。为什么ETS表格不被垃圾收集?

为什么ETS数据结构(字典/树)与Erlang内置类型(列表/元组等)的处理差别很大。也就是说,它们不是垃圾回收,它们是可变的,因此所有使用它们的函数都有副作用。为了避免内存泄漏,不得不跟踪ETS表格以避免内存泄漏。

是否有一个原因,Erlang没有一个字典数据类型的行为更像一个列表(是不可变的和垃圾回收)?

是否假设ETS仅用于大型数据库(如拷贝非常昂贵的结构)以及其他用于键/值数据结构的O(n)列表的元组?

回答

2

ETS与数据结构相比更像是一种数据库设施。如果你想要一个键值数据类型,那么你可以使用dict module,其行为像任何其他Erlang术语(垃圾收集,不可变等)。标准库中还实现了其他常用数据结构,例如集合和平衡树。大多数时候,ETS是不必要的。

+0

哦,我没有听说过字典。这很有道理。谢谢, – jjh 2013-05-01 06:50:13