Зачем нужна сборка мусора (GC) на языке стеков? Есть ли необходимость в сборке мусора на таких языках, как Forth или RPL (на калькуляторах HP )?
Я бы подумал, поскольку вывод выводится из стека, в этом не будет необходимости. Я что-то пропустил?
garbage-collection
stack-oriented
Тодд Моисей
источник
источник
Да, ты прав. Но основанность стека - это только часть всей истории. Например, интерпретатор байт-кода Java также основан на стеке (скомпилированный код работает - по соображениям эффективности - по-другому). Это говорит нам о том, что любой язык может быть преобразован в язык стека.
Важны объекты вне стека, те, кто может пережить текущее выполнение метода. Пока в языке нет ничего похожего
malloc
илиnew
нет, таких объектов нет и вам не нуженdelete
ни GC.Язык, которому не хватает динамического выделения памяти, весьма ограничен в своей полезности.
источник
Сборка мусора требуется, если язык будет поддерживать динамические структуры данных по своей природе. Это почти необходимо, если вы хотите сделать что-то выше уровня C. Без этого вы застряли только с фиксированными структурами данных и управляете памятью самостоятельно. Это то, что делает оригинальный Forth, конечно, но это, вероятно, не то, что вы хотели бы сделать сегодня, если только вы не делаете низкоуровневое системное кодирование.
источник
Сборка мусора не требуется, если язык использует статическое распределение вместо размещения в стеке. Например, Fortran 77 с опцией -s (статическое хранилище) выделяет всю память при запуске программы, поэтому во время выполнения не происходит выделения памяти для освобождения. Хотя это требует некоторой дисциплины, возможно написание программ, особенно симуляций, для использования статического распределения памяти. Статическое распределение устраняет любые утечки памяти и приводит к потрясающей производительности кеша, поскольку компилятор может использовать статический анализ, чтобы определить, что загружать в кеш.
источник