I think there are three (or two, if you merge the first two) classes of what happens at the interface:

* Get the whole array in memory at once (dynd array)
* Iteration protocols that stream through the data per element or in chunks on the local machine
* Symbolic representations of the data with computation, to allow reasoning about deferred computation and how the data is distributed across a cluster or between different data stores