[英]Erlang persistent data structures
使用[H|T]
構建列表時,您誤解了這種情況。 正如你所說, T
沒有復制,但也不是H
所有這一切都是在T
添加一個新的列表單元格,並引用H
作為其頭部(尾部為T
)。 使用列表時,創建的唯一位是實際列表單元格,而不是每個單元格中的數據。
使用dict
時dict
發生同樣的情況。 在dict
修改(添加/刪除元素)時,僅修改實際的dict
結構,而不是dict
的實際數據。 它也很聰明,只能復制盡可能少的dict
結構來進行修改。
所以,是的,Erlang具有持久的數據結構。 在這方面,clojure就像Erlang(我們在它之前很久)。
根據我的經驗,庫模塊的數據結構在性能或內存壓力變大時不會降低。
對於dict,它使用動態哈希表作為內部數據結構,並且工作基本上僅在完成修改的存儲桶上完成。
我還查看了gb_trees
模塊,在那里我找到了評論:
行為是對數的(應該是)。
並且gb_trees
通常非常快,所以我很確定沒有太多的復制正在進行。
通常,如果您使用Erlang之類的語言實現這些數據結構,則需要處理復制問題,因此無需擔心常規庫函數。
我重讀了有關持久性數據結構的文章:在本文的意義上,Erlang的數據結構是完全持久的,也是持久的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.