<div dir="ltr"><div><div><div>I agree.  <br><br>There seems to be a set of array operations that are typically used on dense arrays that depend on knowing where the start of the keyspace is and where the gaps in the keyspace are (knowing whether the array is dense is a special case of that).  I can't think of a way to implement them in a way that works for sparse arrays and is intuitive.  <br><br>It would be an option to have part of the contract be that the input array must be dense - we'd just fail if some were missing.  That seems like something that almost should be part of the type system rather than a runtime pseudo-type error.<br><br></div><div>In some cases it could degrade more gracefully, e.g just leaving gaps in the output array, but that's not generally viable.<br></div><div><br></div>I wonder if there are a set of analogous primitives for sparse arrays. e.g. maybe slice(T a[], T begin, T end) just copies any existing keys such that begin <= key <= end to the new array, and leaves any gaps.<br><br></div>Anyway, those were some unstructured thoughts - definitely agree that it needs more thought.<br><br></div>- Tim<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 9 March 2015 at 13:05, Mihael Hategan <span dir="ltr"><<a href="mailto:hategan@mcs.anl.gov" target="_blank">hategan@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I became suspicious that the proposed array functions aren't very well<br>
thought of. So I believe that we should not attempt to implement them<br>
without further thought.<br>
<br>
Specifically:<br>
<br>
1. T[K] slice(T[K] a, int start, int end)<br>
<br>
What do start and end signify? If there is some ordering on K, then they<br>
could make sense as indices in the ordered set of keys once the array is<br>
closed. Unfortunately this requires one to wait for the array to be<br>
closed.<br>
<br>
2. T[int][K] split(T[K], int n)<br>
<br>
Same issue. If the splitting is to be deterministic, one needs to wait<br>
for the array to be closed.<br>
<br>
3. T[int] join(T[K1][K2] a)<br>
<br>
Same.<br>
<br>
To some extent, these could be implemented nicely if they worked on<br>
"compacted" arrays (i.e. T[int] arrays for which the indices are known<br>
to be consecutive).<br>
<br>
Mihael<br>
<br>
_______________________________________________<br>
Swift-devel mailing list<br>
<a href="mailto:Swift-devel@ci.uchicago.edu">Swift-devel@ci.uchicago.edu</a><br>
<a href="https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel" target="_blank">https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel</a><br>
</blockquote></div><br></div>