Reconciling mutable collections
scgmille@xxxxxx 29 Jul 2003 03:16 UTC
Matthias raised some concerns about the collection making 'purely
mutable', i.e. collections who can only be updated through side effects,
and for which (eq? old new) is always #t.
After some discussion on #scheme, this proposal came out.
Mutability would be come an attribute of collections, just as
orderedness is at the moment. Attributes inform the programmer when
certain functions are defined. For example, collection-fold-right is
defined when ordered-collection? returns #t.
Purely mutable collections would return #t from mutable-collection?, and
when present, an additional form of each update procedure would exist
and would be defined on that collection, such as *-add!!. The procedure
takes a collection as input and its return value is undefined. *-add!
and *-add would also still be defined. *-add may require cloning to
operate, and *-add! could be equivalent to *-add!!, but would return the
input collection as output.
This is necessary in order to both support purely mutable collections
and to allow portable code to be written to such collections and still
be efficient in the absence of an omniscient compiler. Furthermore, the
programmer need not know that a specific collection is being used, only
that its mutable.