finished?
unfinished, need copy() and copy_backward()