I believe the bounds check, in particular, is devastating for autovectorization. There are ways around it, but it requires additional code in safe rust.
Edit: actually looks like autovectorization is in play here [1]. Doesn't look like the bounds check gets in the way at all.
There's no autovectorization there; scalar f64-s just are always stored in xmm registers. And the bounds check is still there.