
On Sunday 30 November 2008 6:28:29 am Roman Leshchinskiy wrote:
On 30/11/2008, at 11:36, Don Stewart wrote:
Should mutable arrays have list-like APIs? All the usual operations, just in-place and destructive where appropriate?
I don't know. To be honest, I don't think that the term "mutable array" describes a single data structure. For instance, one of the central questions which unveils a whole bunch of design possibilities is: can mutable arrays be concatenated and how does that work if yes?
I don't know about concatenation, but it is useful for them to be able to be zipped. For instance: schwartz f arr = do keys <- cloneWith f arr pairs <- zip keys arr sortBy (comparing fst) pairs (cloneWith should construct a new array where new[i] = f (old[i])) is a mutable sort of arr using the comparison compare e e' = compare (f e) (f e') caching the results of f for each element. This, obviously, takes advantage of the fact that sorting the zipped array mutably updates the underlying (original) arrays. On the other hand, I could see such an operation easily leading to bugs if it slips your mind that changing one array can effect another (maybe it should be called unsafeZip :)). -- Dan