PyTut: (Teminology) To clone, copy, or spawn -- that is the question!
I've many time seen these three words applied improperly as symbols and believe
i should explicitly define these terms in a programming context so that we all
might use them correctly.
Also notice that i did not mention "deepcopy". I did so for good reason because
i believe the term "deepcopy" should NEVER be used in a programming context
anymore (maybe anywhere).
Firstly let's understand the English definitions of clone, copy and spawn:
--------------------------------------------------------
Define: Clone
-------------------------------------------------------
1. A cell, cell product, or organism that is
genetically identical to the unit or individual from
which it was derived.
2. Something that duplicates, imitates, or
closely resembles another in appearance, function,
performance, or style: All the fashion models seemed to
be clones of one another.
[Disambiguation] In the first definition, a clone is an object that is created
by building an new object whos' internal structure is perfectly /identical/ to
the internal structure of the existing object. In the second definition an
object imitates another object so closely that an observer cannot distinguish
between the individuals of a group and consequently refers to all members as a
whole. Both are correct within their respective relativities, however, the
first definition is based upon /tangible facts/ and the second depends on an
observers' /interpretation/.
--------------------------------------------------------
Define: Copy
--------------------------------------------------------
A thing made to be similar or identical to another.
[Disambiguation] I believe this definition is self-defeating. Maybe even
expressing circular reasoning. Can something be similar or identical? I think
not! identical and similar are NOT interchangeable. My /strong/ opinion is that
ALL copies must be /identical/. Not only in appearance, but in every possible
detail; internal structure, state, EVERYTHING!
--------------------------------------------------------
Define: Spawn
--------------------------------------------------------
To bring forth, or generate.
[Disambiguation] This definition is the correct base definition of "spawn".
However, the definition does disqualify specific use of the word leaving only
general usage. Sure, we are creating (or "spawning") /something/, but what
/exactly/ are we creating? Also, we have no hint as to which paradigm will be
used to do the creating; will the result of this "spawning" be an *exact* copy
of "something", or a /similar/ copy of "something", or something new that is
based on a paradigm of creation for which we are oblivious? Who knows?
--------------------------------------------------------
Terminology Transformation
--------------------------------------------------------
If you ever find yourself in a situation where you need to create a new object
from an existing object, be sure you use them following these simple and
intuitive rules:
* Clone: Only use "clone" when you intent to create a new object that is an
exact replication of the existing object (interface) but NOT an object that
will be initalized with the existing objects' state! The new clone should look
like the old object and interface like the old object, HOWEVER, the new clone's
state should be a default, NOT A COPY!
* Copy: Only use "copy" when you intend to create a new object that is an
EXACT copy of the original object. Yes, that means all the way down to the
deepest nesting, farthest corners, and smelliest nether-regions of the object!
I don't like the term "deepcopy" because there is only ONE type of copy, and
that is the *EXACT* copy.
* Spawn: This term is so general that usage of it should be limited to /very/
generic interfaces. Interfaces that need to create something in a "factory"
type manner would be a good example. These interfaces should be low level.
Interfaces existing above should provide more specifics and use the copy or
clone terminology appropriately.
-rr
--
http://mail.python.org/mailman/listinfo/python-list