[erlang-questions] 2D Map Arrays

Mikael Pettersson <>
Wed Sep 13 14:53:01 CEST 2006


Richard Carlsson writes:
 > Jeff Crane wrote:
 > > What do I do when I want to operate on a similarly
 > > sized dynamic layer that I want to read/write to?
 > 
 > A while ago, Dan Gudmundsson posted an array datatype implementation
 > to the list. Since then, I and Dan have been rewriting it with the
 > intention of eventually making it a standard library component. Here
 > is a preview; the interface should be pretty stable now:
 > 
 >    http://user.it.uu.se/~richardc/array/
 > 
 > It still uses a tree structure, but since it uses indices from 0 to N
 > instead of arbitrary keys, it can be quite a lot more efficient in both
 > time and space than gb_trees or dicts.

The HiPE compiler heavily uses gb_trees for array-like objects, so I
tested the array module in HiPE. The array module's interface is a close
match to our own `hipe_vectors_wrapper' module, so the integration was
easy. The array module works nicely but I haven't done any performance
measurements yet.

There are two things about the array module I don't quite like:
1. Doing a set on an index higher than the current maximum causes the
   array to grow, while doing a get on an index higher than the current
   maximum throws an exception. This makes sense for objects like partial
   mappings, but is quite strange for array-like objects. Perhaps a
   name change to "intmap" would capture its behaviour more accurately?
2. It has an extensible index range, but we only construct arrays of
   given sizes and then stay within those boundaries. So do we lose
   any performance due to the extensibility feature we don't use?

/Mikael



More information about the erlang-questions mailing list