Есть ли необходимость в сборке мусора в стековом языке?

16

Зачем нужна сборка мусора (GC) на языке стеков? Есть ли необходимость в сборке мусора на таких языках, как Forth или RPL (на калькуляторах HP )?

Я бы подумал, поскольку вывод выводится из стека, в этом не будет необходимости. Я что-то пропустил?

Тодд Моисей
источник

Ответы:

14

GC обычно применяется к памяти, выделенной в куче. Я не знаком с Forth или RPL, но если нет кучи, и вместо этого все хранится в глобальном стеке, то GC ничего не может сделать.

Майк Баранчак
источник
2
Типичная схема использования памяти программами Forth, которые я читал в первые дни, заключалась в том, что они были похожи на программы на ассемблере, в которых они использовали заранее установленные статические глобальные адреса данных. Это работает, потому что Forth имеет возможность передавать данные между стеком и определенными адресами. Кроме того, он имеет возможность вычислять адреса. Таким образом, было бы возможно создать библиотеку распределителя, основанную на концепции кучи, и библиотеке распределителя потребуется некоторый способ справиться с конечным размером кучи. Если бы пользователь Forth пошел по этому пути, он, возможно, захотел бы и внедрил GC.
Кардифф космический человек
13

Да, ты прав. Но основанность стека - это только часть всей истории. Например, интерпретатор байт-кода Java также основан на стеке (скомпилированный код работает - по соображениям эффективности - по-другому). Это говорит нам о том, что любой язык может быть преобразован в язык стека.

Важны объекты вне стека, те, кто может пережить текущее выполнение метода. Пока в языке нет ничего похожего mallocили newнет, таких объектов нет и вам не нужен deleteни GC.

Язык, которому не хватает динамического выделения памяти, весьма ограничен в своей полезности.

maaartinus
источник
не уверен, что я согласен с последней строкой, байт-код Java не полезен?
JK.
@jk., байт-код Java имеет динамическое распределение памяти.
Питер Тейлор
1
На самом деле, есть несколько языков общего назначения, которые основаны на стеке. Взгляните на factorcode.org
Ям Маркович
1
Фактически фактор - сбор мусора
Андреа
1

Сборка мусора требуется, если язык будет поддерживать динамические структуры данных по своей природе. Это почти необходимо, если вы хотите сделать что-то выше уровня C. Без этого вы застряли только с фиксированными структурами данных и управляете памятью самостоятельно. Это то, что делает оригинальный Forth, конечно, но это, вероятно, не то, что вы хотели бы сделать сегодня, если только вы не делаете низкоуровневое системное кодирование.

транс
источник
1

Сборка мусора не требуется, если язык использует статическое распределение вместо размещения в стеке. Например, Fortran 77 с опцией -s (статическое хранилище) выделяет всю память при запуске программы, поэтому во время выполнения не происходит выделения памяти для освобождения. Хотя это требует некоторой дисциплины, возможно написание программ, особенно симуляций, для использования статического распределения памяти. Статическое распределение устраняет любые утечки памяти и приводит к потрясающей производительности кеша, поскольку компилятор может использовать статический анализ, чтобы определить, что загружать в кеш.

Михаил Шопсин
источник