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