Использует ли newLISP сборку мусора?
Эта страница была довольно запутанной для меня.
Это говорит:
Управление памятью в newLISP не зависит от алгоритма сборки мусора. Память не помечена или не подсчитана. Вместо этого решение об удалении вновь созданного объекта памяти принимается сразу после создания объекта памяти.
newLISP следует правилу только одной ссылки (ORO). Каждый объект памяти, на который не ссылается символ, устарел, когда newLISP достигает более высокого уровня оценки во время вычисления выражения. Объекты в newLISP (исключая символы и контексты) передаются путем копирования значения в другие пользовательские функции. В результате каждый объект newLISP требует только одну ссылку.
Далее я вижу:
Все списки, массивы и строки передаются во встроенные функции и из них по ссылке.
Я не могу понять этих двух.
Как newLISP "не полагаться на алгоритм сборки мусора", и все же передавать вещи по ссылке?
Например, что бы он сделал в случае циклических ссылок?!
Возможно ли даже для LISP не использовать сборку мусора, не снижая производительность? (Я предполагаю, что вы всегда можете передавать вещи по значению, или вы всегда можете выполнять сканирование полной кучи, когда считаете, что это может быть необходимо, но тогда мне кажется, что это безумно повредит вашей производительности.)
Если это так, как бы он справился с циркулярными ссылками? Если нет, что они значат?
1 ответ
Возможно, чтение http://www.newlisp.org/ExpressionEvaluation.html поможет лучше понять статью http://www.newlisp.org/MemoryManagement.html. Что касается циклических ссылок: их нет в newLISP, их невозможно создать. Вопрос о производительности рассматривается в подразделе этого документа по управлению памятью и здесь: http://www.newlisp.org/benchmarks/
Может быть, работа и экспериментирование с newLISP - то есть попытка создать круговую ссылку - прояснит большинство вопросов.