(multiple returns won't mutate earlier result).
Do we want to inherit the property for @vector-safe? Current reference
implementation is not. It can be checked with something like this:
(let* ((cc #f)
(v0 #f)
(v1 (u8vector-map (lambda (n)
(when (= n 1)
(unless (call/cc (lambda (k) (set! cc k) #t))
(set! cc #f)))
(* n 2))
'#u8(1 2))))
(when cc
(set! v0 v1)
(u8vector-set! v0 1 0)
(cc #f))
(list v0 v1))
;; if restart safe, returns (#u8(2 0) #u8(2 4))
;; otherwise, (#u8(2 4) #u8(2 4))
Restart safety is a nice property, but if the user of srfi-160 expects efficiency,
it kind of defeats the expectation.
If we don't require restart-safety, it should be mentioned somewhere because
it's divergence from R7RS/srfi-133 assumption.
Shall we require @vector-map restart-safe?
Other procedures that restart-safety may matter:
@vector-unfold, @vector-unfold-right, @vector-cumulate,
@vector-filter, @vector-remove, @vector-filter, @vector-partition
But for these, srfi-133 counterparts doesn't mention restart safety, so
we can leave them as they are.