- Terminology
- Versioning
- Comparison of different approaches
- Fat node method, node-copying method
- Clojure vectors and maps (bit-partitioned array tries & HAMTs), path copying
- Recent improvements
@thesis{okasaki1996purely,
langid = {english},
title = {Purely Functional Data Structures},
url = {http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf},
institution = {{Carnegie Mellon}},
urldate = {2014-06-01},
date = {1996},
author = {Okasaki, Chris}
}
@article{blelloch2001persistent,
title = {Persistent Triangulations},
volume = {11},
url = {https://www.cambridge.org/core/journals/journal-of-functional-programming/article/persistent-triangulations/C7F680713ADE671FB51850F1850B9B2D},
number = {5},
journaltitle = {Journal of Functional Programming},
urldate = {2017-09-29},
date = {2001},
pages = {441--466},
author = {Blelloch, Guy and Burch, Hal and Crary, Karl and Harper, Robert and Miller, Gary and Walkington, Noel}
}
@thesis{dinkla1998geometrische,
title = {Geometrische {{Algorithmen}} in {{Haskell}}},
date = {1998},
author = {Dinkla, Jörn}
}
@article{sarnak1986planar,
title = {Planar Point Location Using Persistent Search Trees},
volume = {29},
url = {http://dl.acm.org/citation.cfm?id=6151},
number = {7},
journaltitle = {Communications of the ACM},
urldate = {2017-09-29},
date = {1986},
pages = {669--679},
author = {Sarnak, Neil and Tarjan, Robert E.}
}
@inproceedings{chuang1993realtime,
title = {Real-Time Deques, Multihead {{Turing}} Machines, and Purely Functional Programming},
booktitle = {Proceedings of the Conference on {{Functional}} Programming Languages and Computer Architecture},
publisher = {{ACM}},
date = {1993},
pages = {289--298},
author = {Chuang, Tyng-Ruey and Goldberg, Benjamin}
}
@online{what2010,
title = {What's New in Purely Functional Data Structures since {{Okasaki}}? - {{Theoretical Computer Science Stack Exchange}}},
url = {https://cstheory.stackexchange.com/questions/1539/whats-new-in-purely-functional-data-structures-since-okasaki},
shorttitle = {Reference Request - {{What}}'s New in Purely Functional Data Structures since {{Okasaki}}?},
urldate = {2017-10-24},
date = {2010}
}
@report{bagwell2001ideal,
title = {Ideal Hash Trees},
date = {2001},
author = {Bagwell, Phil}
}
@incollection{kaplan1995persistent,
title = {Persistent Data Structures},
booktitle = {Handbook on Data Structures and Applications},
date = {1995},
pages = {241--246},
author = {Kaplan, Haim},
editorb = {Mehta, Dinesh and Sartaj Sahni},
editorbtype = {redactor}
}
@misc{sommer2005persistent,
title = {Persistent {{Data Structures}}},
url = {https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2005/lecture-notes/persistent.pdf},
urldate = {2017-10-24},
date = {2005},
author = {Sommer, Gentry and Kohler, Eddie}
}
@report{bagwell2000fast,
title = {Fast and Space Efficient Trie Searches},
date = {2000},
author = {Bagwell, Phil}
}
@inproceedings{steindorfer2015optimizing,
langid = {english},
title = {Optimizing Hash-Array Mapped Tries for Fast and Lean Immutable {{JVM}} Collections},
isbn = {978-1-4503-3689-5},
url = {http://dl.acm.org/citation.cfm?doid=2814270.2814312},
doi = {10.1145/2814270.2814312},
publisher = {{ACM Press}},
urldate = {2017-12-05},
date = {2015},
pages = {783-800},
author = {Steindorfer, Michael J. and Vinju, Jurgen J.}
}
@unpublished{hickey2008clojure,
title = {Clojure: {{A Dynamic Programming Language}} for the {{JVM}}},
date = {2008},
author = {Hickey, Rich},
note = {https://www.infoq.com/presentations/hickey-clojure?utm\_source=presentations\_about\_JVMLanguageSummit\&utm\_medium=link\&utm\_campaign=JVMLanguageSummit}
}
@article{prokopec2017cacheaware,
title = {Cache-Aware Lock-Free Concurrent Hash Tries},
journaltitle = {arXiv preprint arXiv:1709.06056},
date = {2017},
author = {Prokopec, Aleksandar and Bagwell, Phil and Odersky, Martin}
}
@inproceedings{prokopec2012concurrent,
title = {Concurrent Tries with Efficient Non-Blocking Snapshots},
volume = {47},
booktitle = {Acm {{Sigplan Notices}}},
publisher = {{ACM}},
date = {2012},
pages = {151--160},
author = {Prokopec, Aleksandar and Bronson, Nathan Grasso and Bagwell, Phil and Odersky, Martin}
}
@report{bagwell2011rrbtrees,
title = {{{RRB}}-{{Trees}}: {{Efficient Immutable Vectors}}},
shorttitle = {{{RRB}}-{{Trees}}},
date = {2011},
author = {Bagwell, Philip and Rompf, Tiark}
}
@inproceedings{prokopec2018cachetries,
langid = {english},
title = {Cache-Tries: Concurrent Lock-Free Hash Tries with Constant-Time Operations},
isbn = {978-1-4503-4982-6},
url = {http://dl.acm.org/citation.cfm?doid=3178487.3178498},
doi = {10.1145/3178487.3178498},
shorttitle = {Cache-Tries},
publisher = {{ACM Press}},
urldate = {2018-03-02},
date = {2018},
pages = {137-151},
author = {Prokopec, Aleksandar}
}
@article{driscoll1989making,
langid = {english},
title = {Making {{Data Structures Persistent}}},
number = {38},
journaltitle = {Journal of Computer and Systems Science},
date = {1989},
pages = {86-124},
author = {Driscoll, James R. and Sarnak, Neil and Sleator, Daniel D.}
}
@online{expert2013,
title = {Expert to {{Expert}}: {{Rich Hickey}} and {{Brian Beckman}} - {{Inside Clojure}}},
url = {https://www.youtube.com/watch?v=wASCH_gPnDw},
urldate = {2018-06-11},
date = {2013}
}
@online{lorange2015understanding,
title = {Understanding {{Clojure}}'s {{Persistent Vectors}}, Pt. 1},
url = {https://hypirion.com/musings/understanding-persistent-vector-pt-1},
urldate = {2018-06-12},
date = {2015-09-25},
author = {L’orange, Jean Niklas}
}
@online{krukow2009understanding,
title = {Understanding {{Clojure}}'s {{PersistentHashMap}} (Deftwice...)},
url = {http://blog.higher-order.net/2009/09/08/understanding-clojures-persistenthashmap-deftwice.html},
urldate = {2018-06-12},
date = {2009-09-08},
author = {Krukow, Karl}
}
@book{emerick2012clojure,
langid = {english},
location = {{Sebastopol, Calif}},
title = {Clojure Programming},
edition = {1st ed},
isbn = {978-1-4493-9470-7},
pagetotal = {607},
publisher = {{O'Reilly}},
date = {2012},
author = {Emerick, Chas and Carper, Brian and Grand, Christophe},
note = {OCLC: ocn711045678}
}
@thesis{lorange2014improving,
langid = {english},
title = {Improving {{RRB}}-{{Tree Performance}} through {{Transience}}},
date = {2014},
author = {L'orange, Jean Niklas}
}
@video{spiewak2011extreme,
title = {Extreme {{Cleverness}}: {{Functional Data Structures}} in {{Scala}}},
url = {https://www.infoq.com/presentations/Functional-Data-Structures-in-Scala},
shorttitle = {Extreme {{Cleverness}}},
series = {Strange Loop 2011},
urldate = {2018-06-14},
date = {2011-12-14},
director = {Spiewak, Daniel}
}
@inproceedings{conchon2007persistent,
langid = {english},
title = {A Persistent Union-Find Data Structure},
isbn = {978-1-59593-676-9},
url = {http://portal.acm.org/citation.cfm?doid=1292535.1292541},
doi = {10.1145/1292535.1292541},
publisher = {{ACM Press}},
urldate = {2018-06-14},
date = {2007},
pages = {37},
author = {Conchon, Sylvain and Filliâtre, Jean-Christophe}
}
@online{bierner2014hash,
title = {Hash {{Array Mapped Tries}} in {{Javascript}} – {{UWTB}}},
url = {https://blog.mattbierner.com/hash-array-mapped-tries-in-javascript/},
urldate = {2018-06-17},
date = {2014-03-06},
author = {Bierner, Matt}
}
@article{blelloch2015cache,
langid = {english},
title = {Cache Efficient Functional Algorithms},
volume = {58},
issn = {00010782},
url = {http://dl.acm.org/citation.cfm?doid=2797100.2776825},
doi = {10/f7hw38},
number = {7},
journaltitle = {Communications of the ACM},
urldate = {2018-06-18},
date = {2015-06-25},
pages = {101-108},
author = {Blelloch, Guy E. and Harper, Robert}
}
@video{clojuretvstriving,
title = {Striving to {{Make Things Simple}} and {{Fast}} - {{Phil Bagwell}}},
url = {https://www.youtube.com/watch?v=K2NYwP90bNs},
urldate = {2018-06-18},
director = {{ClojureTV}}
}
@online{pangsakulyanont2016immutable,
title = {Immutable.Js, Persistent Data Structures and Structural Sharing},
url = {https://medium.com/@dtinth/immutable-js-persistent-data-structures-and-structural-sharing-6d163fbd73d2},
journaltitle = {Medium},
urldate = {2018-06-19},
date = {2016-12-08T15:28:49.026Z},
author = {Pangsakulyanont, Thai}
}
@online{what2013,
title = {What Classes of Data Structures Can Be Made Persistent?},
url = {https://cs.stackexchange.com/questions/18262/what-classes-of-data-structures-can-be-made-persistent},
journaltitle = {Computer Science Stack Exchange},
urldate = {2018-06-19},
date = {2013}
}
This work is licensed under a Creative Commons Attribution 4.0 International License.