21

Kennt jemand eine C++ - Datenstrukturbibliothek, die funktionale (a.k.a. unveränderliche oder "persistente" im FP-Sinn) Äquivalente der bekannten STL-Strukturen bereitstellt?Funktionale Datenstrukturen in C++

Mit "funktional" meine ich, dass die Objekte selbst unveränderlich sind, während Änderungen an diesen Objekten neue Objekte zurückgeben, die die gleichen Interna wie das übergeordnete Objekt haben, wo es angemessen ist.

Idealerweise würde eine solche Bibliothek STL ähneln und würde gut mit Boost.Phoenix funktionieren (Vorsicht - Ich habe Phoenix nicht benutzt, aber soweit ich das beurteilen kann, bietet es viele Algorithmen, aber keine Datenstrukturen, außer a faul berechnete Änderung an einer bestehenden Datenstruktur zählt - tut es?)

+0

Konnten Sie nicht den gewünschten Effekt erzielen, indem Sie alle Objekte nach Wert übergeben und zurückgeben? –

+4

Nur wenn ich den Performance- und Speicheraufwand überstehen konnte. Der Trick bei funktionalen Datenstrukturen ist, dass sie wo immer möglich Interna teilen. Dies ist sicher zu tun, da die Objekte unveränderlich sind und viel weniger Speicher- und Prozessor-hungrig sind als nur die Rückgabe großer Datenstrukturen. – drg

+6

Ich war wirklich interessiert an der gleichen Frage, während ich den Erfahrungsbericht unter http://portal.acm.org/citation.cfm?id=1596591 mitschrieb. Meine Schlussfolgerung zu dieser Zeit war, dass Sie wirklich eine Müllsammlung brauchen: Der Vorteil der persistenten Struktur liegt in der gemeinsamen Nutzung, aber im Falle des Teilens gibt es keinen eindeutigen Besitz eines einzelnen Knotens mehr, also eine Art zentrale Autorität (GC). muss entscheiden, welche Knoten zurückgewonnen werden können. Das, oder es ist für Ihre Anwendung nicht wichtig, dass Knoten nur zugewiesen und niemals freigegeben werden. –

Antwort

3

Ich würde sehen, ob FC++ entwickelt von Yannis Smaragdakis enthält alle Datenstrukturen. Sicherlich geht es bei diesem Projekt mehr als jeder andere darum, einen funktionalen Stil in C++ zu unterstützen.

+0

Sieht aus wie eine interessante Bibliothek, aber keine neue Aktivität. Es ist ein persistenter Listendatentyp vorhanden, der jedoch außerhalb von FC++ nicht für die allgemeine Verwendung geeignet ist. – drg

1

Dies ist mehr ein Heads-up als eine detaillierte Antwort, aber Bartosz Milewski scheint eine Menge Arbeit daran getan zu haben. Siehe zum Beispiel:

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

Sieht aus wie er eine Menge von Algorithmen aus Okasiki Buch Rein Strukturen Funktionsdaten hier umgesetzt hat:

https://github.com/BartoszMilewski/Okasaki

N. B. Ich habe diese noch nicht ausprobiert, aber sie sind die ersten persistenten C++ - Datenstrukturen, die ich außerhalb von FC++ gesehen habe.

Hoffentlich werde ich sie bald ausprobieren.

+0

Sie scheinen wichtige Teile zu fehlen ... wie die Löschung – Michael