On Saturday, 27 February 2016 at 23:19:51 UTC, w0rp wrote:
On Saturday, 27 February 2016 at 22:31:28 UTC, Brother Bill wrote:
Clojure supports immutable lists that allow adding and removing elements, and yet still have excellent performance.

For D language, what are the recommended techniques to use functional programming, without massive copying of data and garbage collection, so that it remains immutable.

That is, how to create one-off changes to an immutable data structure, while keeping the original immutable, as well as the one-off change, and maintain good performance.

Thank you

I think this is a property of linked lists which could possibly be advantageous. However, I would keep in mind that memory layout is very important when it comes to execution speed, and that slices of memory are unbeatable in that regard. That's worth stating first.

I think for linked lists, you can always create a new node which points to another node. So you start with element a as immutable, then you take a head element b and point to a, so you get b : a, then c : b : a, etc. So you can create larger and large immutable linked lists because you never actually change a list, you just produce a new list with an element pointing the head of a previous list.

I'm not sure if Phobos has something suitable for this, but you could always implement your own singly linked list in such a manner pretty easily. I would be tempted just to use slices instead, though. Linked lists are rarely better.

Often people use a lot more advanced structures than linked lists for immutable data structures. http://www.infoq.com/presentations/Functional-Data-Structures-in-Scala

Reply via email to