Skip to content

Пам'ять (env) ​

Контракт експортує одну лінійну memory. Host-функції читають і пишуть її через пари (ptr, len); вказівник чи довжина за межами пам'яті призводять до помилки host-функції (зазвичай повертається -1), а не до переривання.

VM копіює вхідні дані виклику зі зміщенням 64; див. Експорти контракту → call.

allocate працює ​

text
(import "env" "allocate" (func (param i32) (result i32)))
allocate(size: i32) → ptr: i32

Резервує size байтів простим зсувним алокатором і повертає початок. Хост лише пересуває курсор — пам'ять він не збільшує, тож контракт має подбати, щоб діапазон існував. Від'ємні розміри вважаються 0; один запит обмежено 1 MiB. Для інструментаріїв (AssemblyScript тощо), які очікують, що виділятиме хост.

deallocate працює ​

text
(import "env" "deallocate" (func (param i32)))

Нічого не робить — зсувний алокатор ніколи не звільняє пам'ять. Є, щоб лінкувався код, написаний під інтерфейси алокаторів.

abort працює ​

text
(import "env" "abort" (func (param i32 i32 i32 i32)))

Хук переривання AssemblyScript, прийнятий, щоб такі модулі лінкувалися. Він нічого не робить і не зупиняє виконання — AssemblyScript після нього виконує unreachable, і саме це робить виклик невдалим. Щоб навмисно завершити виклик помилкою, перервіться (unreachable) — це відкотить усе дерево викликів — або поверніть помилку через set_return, коли викликач має побачити повідомлення.