К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

Slice

Тип TVM, представляющий «вид» (read-only cursor) на cell для парсинга. Из cell делают slice, чтобы прочитать его содержимое.

Синонимы: тип slice, ton slice

Slice — один из ключевых типов TVM, представляющий read-only курсор на cell. Если cell — это контейнер с битами и ссылками, то slice — это позиция, с которой читается содержимое: «прочитать 32 бита», «прочитать ссылку на следующий cell», и так далее.

Жизненный цикл

Типичный pattern работы со cell-ом в TVM:

  1. begin_parse превращает cell в slice — курсор в начале.
  2. load_uint(n), load_addr(), load_ref() — операции, читающие из slice по типу. Каждая операция сдвигает курсор.
  3. end_parse проверяет, что весь slice прочитан без остатка (если осталось — ошибка).

В Tact и Tolk этот процесс скрыт: компилятор генерирует код парсинга по объявлениям message/struct. В FunC slice всегда виден явно.

Slice vs Cell

СвойствоCellSlice
Назначениехранить данныечитать данные
Изменяемостьimmutableкурсор перемещается
Используется вstorage, message bodyparsing
Создаётся изbuilder.end()cell.begin_parse()

Cell — это «файл», slice — это «открытый дескриптор для чтения с позицией».

Что важно

  • Slice не копирует данные. Он указывает на тот же cell, просто хранит «где сейчас курсор и сколько осталось».
  • Если в slice осталась дочерняя ссылка, её надо прочитать load_ref() и потом begin_parse() уже на полученном cell — рекурсивно.
  • Газ зависит от того, сколько прочитано, а не от того, сколько лежит в исходном cell. Парсить ровно то, что нужно — оптимизация.

Slice — основа любого парсинга: тела сообщения, состояния контракта, ABI-аргументов.

См. также