I realize this is a more developer issue, but I'm wondering if anyone else thinks it would be a good idea for select! to be changed to not return A[r] (which allocates memory).
I think it could return (A[r.start], A[r.stop]), sub(A, r) or even nothing. As it stands it seems like a performance penalty that can be avoided since the rest of the function should operate on memory in place. In my own project I've made a local copy of select for this reason and taken out the return value.