View, ownership і lifetime
Axiom не хоче, щоб програміст вручну доводив життя pointer-а. Тому view — вбудована семантична borrowed-послідовність.
view<T> — не struct із T* і length у сенсі мови. Backend може lowering-нути його саме так, але semantic analyzer знає region, range, lifetime і permission.
Read-only borrow
1contains_zero(view<const u8> data) -> bool:2 for const u8 b in data:3 if b == 0:4 RETURN true5 RETURN falseconst у element type означає read-only view.
Iteration не створює mutable alias.
Звичайна перевірка.
Немає небезпечного pointer arithmetic.
Mutable borrow
1zero(view<u8> data):2 for usize i = 0; i < data.size(); i = i + 1:3 data[i] = 0Mutable view дає право запису у свій region/range.
Compiler бачить bounds.
Write effect функції можна вивести автоматично: write region(data).
Dangling view не компілюється
1bad -> view<const u8>:2 const u8 local[] = { 1, 2, 3 }3 RETURN localФункція обіцяє повернути borrow.
Storage належить локальному scope.
Повернений view пережив би region local. Це compile-time lifetime error, а не UB.
Два mutable views
Compiler дозволяє їх одночасно лише коли може довести disjoint ranges. Наприклад, buffer[0..128] і buffer[128..256] можна обробляти паралельно; два невідомі overlapping slices — ні.