[REBOL] Re: On mutability and sameness
From: joel:neely:fedex at: 13-Jun-2001 0:16
Hi, Ladislav,
Ladislav Mecir wrote:
> Hi,
>
> a: now ; == 6-Jun-2001/22:36:26+2:00
> b: a ; == 6-Jun-2001/22:36:26+2:00
> same? a b ; == true
> a/day: 7 ; == 7
> same? a b ; == false
>
> provides evidence that the value of 'a has been replaced
> instead of mutated.
>
Or else it simply provides evidence that DATE! values are
not sharable (i.e., DATE! is not a reference type)!
This seems to be at the root of your desire to call DATE!
and TIME! values immutable.
I believe the following model to be simpler:
1) For reference types, the datum associated with a word
(the value to which it is "set") is a reference to the
data value, not a copy of the data itself. This means
that multiple words can "name" or "share" the same
referenced data.
2) For simple/scalar/direct/small/nonreference data types,
the datum associated with a word is a copy of the data
value itself. This means that values of these types
cannot be "shared" in the same way as reference types.
(However, if these data values are located within more
complex data structures which themselves are shared,
then it becomes possible to traverse alternate paths
which arrive at the same nonreference value. In such
cases, a modification to the value (if it is mutable)
will be visible through all such "computed" references.)
For example, in:
>> b: []
== []
>> insert b now
== []
>> a: reduce ['then "whatever" 'jetzt b]
== [then "whatever" jetzt [13-Jun-2001/0:08:19-5:00]]
>> o: make object! [x: 42 y: copy a]
>> o/y/jetzt/1/month: 7
== 7
>> b
== [13-Jul-2001/0:08:19-5:00]
the simplest explanation is that the MONTH field of a DATE!
value was changed. I know of no motivation for making it any
more complicated than that.
But, "What about SAME?", one might ask.
If SAME? is implemented simply by comparing one "datum" with
another "datum", then:
1) for reference types, SAME? tests whether the two values
(reference!) refer to a common, shared data structure, but
2) for simple/scalar/direct/small data types, SAME? only
tests whether the two values are currently equal.
Simple.
-jn-
------------------------------------------------------------
Programming languages: compact, powerful, simple ...
Pick any two!
joel'dot'neely'at'fedex'dot'com