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

37 lines
2.0 KiB
Markdown

# Модель памяти
FZLang использует scope-based RAII: объект принадлежит окружению, в котором создан, и освобождается при уничтожении этого окружения.
Отдельного сборщика мусора нет.
## Окружения
Глобальная программа, функция и каждый блок получают окружение.
В нём хранятся имена и значения переменных.
При поиске имени VM проверяет текущее окружение, затем внешние.
После return локальное окружение функции закрывается.
Возвращаемый объект переносится в родительское окружение, чтобы пережить этот момент.
## Владение объектом
Передача объекта во вложенный вызов позволяет использовать его во внутреннем окружении.
Операция `ESCAPE_OBJECT` переносит возвращаемый объект и его дочерние объекты наружу.
```
fn make() Animal
{
Animal result = new Animal;
return result;
}
```
Числа, булевы значения и строки хранятся как значения контейнера ВМ.
Объектное значение содержит указатель на структуру экземпляра, а поля занимают числовые слоты класса.
Объект не следует использовать после завершения окружения, которому он принадлежал.
Возвращайте его из функции или храните в объекте/окружении с большим временем жизни.
---
Назад: [Классы и объекты](./05_classes-and-objects.md)