[OT] Finding longest documents
Sergey Gromov
snake.scaly at gmail.com
Wed Oct 15 13:46:46 PDT 2008
Wed, 15 Oct 2008 14:04:44 -0500,
Andrei Alexandrescu wrote:
> Sergey Gromov wrote:
> > Wed, 15 Oct 2008 09:49:08 -0500,
> > Andrei Alexandrescu wrote:
> >> Sergey Gromov wrote:
> >>> Wed, 15 Oct 2008 09:17:57 -0500,
> >>> Andrei Alexandrescu wrote:
> >>>> I see how it breaks those conventions, but I've never heard of them. The
> >>>> convention I heard of is that if you want dynamic polymorphism you use
> >>>> classes, otherwise you don't.
> >>> How about if you want pass-by-value you use structs, otherwise you don't?
> >>> My argument against structs-collections is that I want to toss
> >>> collections around and build other collections out of them without
> >>> messing with pointers.
> >> A struct can choose to implement value or reference semantics as it
> >> pleases. The only thing it can't readily implement is dynamic polymorphism.
> >
> > I can imagine the documentation: "Ignore the fact it's a struct, it's
> > actually a reference internally."
>
> No. "Don't submit to the dogma that struct == value semantics, because
> that was never true".
I don't understand. Structs are value types, everything else are
implementation details. And yes, I assume that struct copying yields a
separate, independent object unless documented otherwise. I don't
usually need such documentation in my code because I either remember what
I'm doing or the reference components of structs are obvious. But with a
library struct with undocumented, private implementation it becomes an
issue.
> > So how do I return it? Should I
> > return it by value, hoping that the implied reference semantics will stay
> > that way in future releases? How does your Array!() behave?
>
> That's not finished, but e.g. Appender can be copied around and always
> refers to the same underlying array.
This means that without reading docs I won't be able to tell whether my
code is going to work or not. Because the only truly copyable struct-
based solution I can imagine is a struct with a single pointer field
pointing at a heap-allocated implementation. And I doubt that your
Appender is implemented this way.
I'm afraid I'll have to actually look into library sources to make sure
Appender does what I expect.
More information about the Digitalmars-d
mailing list