Immutable data not copied

Lutger lutger.blijdestijn at
Wed Dec 9 00:54:33 PST 2009

Tomek Sowiński wrote:

> const(FAQ) says: "When doing a deep copy of a data structure, the
> invariant portions need not be copied."
> I'm trying to imagine what code would benefit from such optimization.
> immutable struct Large { whole lotta data... }
> struct Other { Large l; }
> void funkcja(Large s);  // no reference annotation on parameter, copied?
> {
>     Large t = s;   // copied?
>     auto other = Other(s);  // copied?
>     Other o = other;  // other.l copied?
> }
> Tomek

As Simen kjaeraas said, deep copy is about following references. The 
optimization mentioned in the faq is not something done automatically by the 
compiler, but merely made possible by immutable. Here is a naive example:

class ImageEditDocument
    immutable(Image)[] layers;

Making a copy of such a document for further editing would normally require 
copying all images in the layers array. If they are immutable, you can just 
copy the references because you know the images will never be modified.

More information about the Digitalmars-d-learn mailing list