2010-05-03 88 views
21

有誰知道C++數據結構庫提供熟悉的STL結構的功能性(a.k.a.不可變,或FP意義上的「持久性」)等價物嗎? 「功能」我的意思是對象本身是不可變的,而對這些對象的修改返回與適當的父對象共享內部相同內部的新對象。理想情況下,這樣的庫類似於STL,並且可以和Boost.Phoenix一起工作(警告 - 我沒有真正使用Phoenix,但據我所知它提供了很多算法,但沒有數據結構,除非懶惰計算的變化到現有的數據結構計數 - 是嗎?)C++中的函數式數據結構

+0

您是否可以通過按值傳遞和返回所有對象來大致獲得所需的效果? – 2010-05-03 10:09:28

+4

只有我能承受性能和內存開銷。功能數據結構的訣竅是它們儘可能共享內部。這是安全的,因爲對象是不可變的,並且比僅僅在大數據結構上返回值要少得多的內存和處理器。 – drg 2010-05-03 10:14:54

+6

我在http://portal.acm.org/citation.cfm?id=1596591共同撰寫經驗報告時,對同一個問題產生了真正的興趣。我當時的結論是,你真的需要垃圾收集:持久結構的優勢在於共享,但是在共享的存在下,不再有任何單一節點的明確所有權,因此某種中央當局(GC)必須決定哪些節點可以回收。對於您的應用程序來說,節點只被分配並且永遠不會被釋放並不重要。 – 2010-05-03 10:28:38

回答

3

我會看看,看看是否由Yannis Smaragdakis開發的FC++包括任何數據結構。當然,這個項目比任何其他項目都支持C++中的功能風格。

+0

看起來像一個有趣的圖書館,儘管沒有最近的活動。在那裏有一個持久的列表數據類型,但它看起來不適合FC++之外的通用應用。 – drg 2010-05-03 22:26:31

1

這不僅僅是一個詳細的答案,而且Bartosz Milewski似乎在這方面做了很多工作。參見,例如:

http://bartoszmilewski.com/2013/11/13/functional-data-structures-in-c-lists/

看起來像他在這裏實現了很多的算法從Okasiki的書純功能性數據結構:

https://github.com/BartoszMilewski/Okasaki

注:我還沒有嘗試過,但它們是我在FC++之外看到的第一個C++持久數據結構。

希望我會盡快嘗試。

+0

他們似乎缺少重要的部分......就像刪除 – Michael 2014-10-23 03:10:43