From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: fac41,15edb893ef79e231 X-Google-Attributes: gidfac41,public X-Google-Thread: f4fd2,23202754c9ce78dd X-Google-Attributes: gidf4fd2,public X-Google-Thread: 103376,15edb893ef79e231 X-Google-Attributes: gid103376,public X-Google-Thread: 114809,15edb893ef79e231 X-Google-Attributes: gid114809,public X-Google-ArrivalTime: 2002-01-22 10:01:11 PST Path: archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!supernews.com!pd2nf1so.cg.shawcable.net!residential.shaw.ca!news2.calgary.shaw.ca.POSTED!not-for-mail From: kaz@accton.shaw.ca (Kaz Kylheku) Newsgroups: comp.lang.lisp,comp.lang.ada,comp.lang.eiffel,comp.lang.smalltalk Subject: Re: Copying semantics molehill (was Re: True faiths) References: <9jtu3u8cq92b05j47uat3412tok6hq Organization: Psycho-Neurotic Institute for the Very, Very Nervous Reply-To: kaz@ashi.footprints.net User-Agent: slrn/0.9.6.3 (Linux) Message-ID: Date: Tue, 22 Jan 2002 18:00:08 GMT NNTP-Posting-Host: 24.69.255.206 X-Complaints-To: abuse@shaw.ca X-Trace: news2.calgary.shaw.ca 1011722408 24.69.255.206 (Tue, 22 Jan 2002 11:00:08 MST) NNTP-Posting-Date: Tue, 22 Jan 2002 11:00:08 MST Xref: archiver1.google.com comp.lang.lisp:25000 comp.lang.ada:19189 comp.lang.eiffel:5498 comp.lang.smalltalk:18445 Date: 2002-01-22T18:00:08+00:00 List-Id: In article , Patrick Doyle wrote: >Kaz Kylheku wrote: >>In article <3C4A58B8.10304@mail.com>, Hyman Rosen wrote: >>>Richard Riehle wrote: >>> >>>> procedure Copy_Deep (Source : in T; Target : in out T); >>>> procedure Copy_Shallow (Source : in T; Target : in out T); >>> >>>I dislike the notion of providing these methods as external interfaces >>>to a type. It seems wrong to me for a client to have to know what kind >>>of copy to use - that's the type's business to know. >> >>This turns out to be circular reasoning, because what a type ``knows'' >>is partally defined by the operations you can perform on it. >> >>Suppose that you have N methods for copying an object. I do not take it >>as a theorem that you can always make an (N + 1)-th method which unifies >>the other N, magically choosing the appropriate one. How can this magic >>meta-method possibly know what semantics the caller wants? > >I must be crazy. I have never written a system where the semantics >of the "copy" operation mattered. Mainly, this is for two reasons: > >1. A lot of my data is immutable, so the copying semantics are moot. > >2. Instead of copying an existing object, my usual idiom is to create a >new one from scratch. Anecdotal evidence. I have written systems where it mattered. Here is a recent example: a protocol stack where I have three ways to copy a network buffer buffer object. I can copy a pointer, and increment a reference count. I can copy the header structure which maintains various pointers into the buffer, and bump up a lower reference count on the buffer. Or I can do a deep copy which copies the buffer as well. This data is not immutable, so the copying semantics are not moot. >I suppose there are some cases where these two things don't apply, or >would be inappropriate, and one would have to think very carefully about >the semantics of copying, but I can't think of such a case off the top >of my head. > >I suppose that only says something about my inexperience as a programmer. >Can anyone show an example of a situation where copying semantics really >matter? How about a Lisp example? (eq 'a 'a) ==> T (eq 'a (copy-symbol 'a)) ==> NIL A copy of a symbol is usually useless, because a symbol is meaningful precisely because it is EQ to itself. So you usually need shallow, reference copies of a symbol. If a symbol is embedded in an object, and you want to copy that object, you probably want to copy those embeddded symbols by reference. And then you are no longer making an entirely new object from scratch; the common symbols are shared substructure.