object identity
Fergus Henderson
fjh at cs.mu.oz.au
Sat Apr 26 17:53:39 AEST 1997
Here's a nifty approach to the problem of object identity.
% An object(T) is an abstract thing that
% has an identity, and a value of type T.
% Objects with the same identity have the same value,
% but objects with the same value can have different
% identities.
% Objects are unifiable and comparable;
% those operations are both O(1), since they need
% only compare the object identities, not the values.
:- type object(T).
% `object_value(Object, Value)' is true iff
% `Object' is an object with value `Value'.
:- pred object_value(object(T), T).
:- mode object_value(in, out) is det. % this is O(1)
OK, fine so far... now here's the interesting bit:
:- mode object_value(out, in) is cc_multi. % this is also O(1)
This of course has a very large number of possible applications...
With the conservative garbage collector, the implementation is trivial:
:- implementation.
:- type object(T) == c_pointer.
:- pragma c_code(object_value(O::in, V::out), will_not_call_mercury, "
V = O;
").
:- pragma c_code(object_value(O::out, V::in), will_not_call_mercury, "
O = V;
").
For accurate garbage collection, the implementation is slightly more
difficult, but still quite easy.
Comments?
--
Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh> | of excellence is a lethal habit"
PGP: finger fjh at 128.250.37.3 | -- the last words of T. S. Garp.
More information about the developers
mailing list