Files
fz-lang/docs/ru/book/06_memory-model.md
T

2.0 KiB

Модель памяти

FZLang использует scope-based RAII: объект принадлежит окружению, в котором создан, и освобождается при уничтожении этого окружения. Отдельного сборщика мусора нет.

Окружения

Глобальная программа, функция и каждый блок получают окружение. В нём хранятся имена и значения переменных. При поиске имени VM проверяет текущее окружение, затем внешние.

После return локальное окружение функции закрывается. Возвращаемый объект переносится в родительское окружение, чтобы пережить этот момент.

Владение объектом

Передача объекта во вложенный вызов позволяет использовать его во внутреннем окружении. Операция ESCAPE_OBJECT переносит возвращаемый объект и его дочерние объекты наружу.

fn make() Animal
{
  Animal result = new Animal;
  return result;
}

Числа, булевы значения и строки хранятся как значения контейнера ВМ. Объектное значение содержит указатель на структуру экземпляра, а поля занимают числовые слоты класса.

Объект не следует использовать после завершения окружения, которому он принадлежал. Возвращайте его из функции или храните в объекте/окружении с большим временем жизни.


Назад: Классы и объекты