Пам'ять (env)
Контракт експортує одну лінійну memory. Host-функції читають і пишуть її через пари (ptr, len); вказівник чи довжина за межами пам'яті призводять до помилки host-функції (зазвичай повертається -1), а не до переривання.
VM копіює вхідні дані виклику зі зміщенням 64; див. Експорти контракту → call.
allocate працює
(import "env" "allocate" (func (param i32) (result i32)))
allocate(size: i32) → ptr: i32Резервує size байтів простим зсувним алокатором і повертає початок. Хост лише пересуває курсор — пам'ять він не збільшує, тож контракт має подбати, щоб діапазон існував. Від'ємні розміри вважаються 0; один запит обмежено 1 MiB. Для інструментаріїв (AssemblyScript тощо), які очікують, що виділятиме хост.
deallocate працює
(import "env" "deallocate" (func (param i32)))Нічого не робить — зсувний алокатор ніколи не звільняє пам'ять. Є, щоб лінкувався код, написаний під інтерфейси алокаторів.
abort працює
(import "env" "abort" (func (param i32 i32 i32 i32)))Хук переривання AssemblyScript, прийнятий, щоб такі модулі лінкувалися. Він нічого не робить і не зупиняє виконання — AssemblyScript після нього виконує unreachable, і саме це робить виклик невдалим. Щоб навмисно завершити виклик помилкою, перервіться (unreachable) — це відкотить усе дерево викликів — або поверніть помилку через set_return, коли викликач має побачити повідомлення.