AXIOM Документація Axiom
ENBLACKGRAYWHITE
Axiom · light

View, ownership і lifetime

Axiom не хоче, щоб програміст вручну доводив життя pointer-а. Тому view — вбудована семантична borrowed-послідовність.

view<T> — не struct із T* і length у сенсі мови. Backend може lowering-нути його саме так, але semantic analyzer знає region, range, lifetime і permission.

Read-only borrow

Borrowed sequenceAxiom
1contains_zero(view<const u8> data) -> bool:2    for const u8 b in data:3        if b == 0:4            RETURN true5    RETURN false
1

const у element type означає read-only view.

2

Iteration не створює mutable alias.

3

Звичайна перевірка.

5

Немає небезпечного pointer arithmetic.

Mutable borrow

Effect inferenceAxiom
1zero(view<u8> data):2    for usize i = 0; i < data.size(); i = i + 1:3        data[i] = 0
1

Mutable view дає право запису у свій region/range.

2

Compiler бачить bounds.

3

Write effect функції можна вивести автоматично: write region(data).

Dangling view не компілюється

Очікувана compile-time помилкаAxiom
1bad -> view<const u8>:2    const u8 local[] = { 1, 2, 3 }3    RETURN local
1

Функція обіцяє повернути borrow.

2

Storage належить локальному scope.

3

Повернений view пережив би region local. Це compile-time lifetime error, а не UB.

Два mutable views

Compiler дозволяє їх одночасно лише коли може довести disjoint ranges. Наприклад, buffer[0..128] і buffer[128..256] можна обробляти паралельно; два невідомі overlapping slices — ні.