37 lines
2.0 KiB
Markdown
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)
|