Clojure vs. D in creating immutable lists that are almost the same.
John Colvin via Digitalmars-d
digitalmars-d at puremagic.com
Sun Feb 28 02:16:23 PST 2016
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
More information about the Digitalmars-d
mailing list