This page一直让我很困惑。
它说:
Memory management in newLISP does not rely on a garbage collection algorithm. Memory is not marked or reference-counted. Instead, a decision whether to delete a newly created memory object is made right after the memory object is created.
newLISP follows a one reference only (ORO) rule. Every memory object not referenced by a symbol is obsolete once newLISP reaches a higher evaluation level during expression evaluation. Objects in newLISP (excluding symbols and contexts) are passed by value copy to other user-defined functions. As a result, each newLISP object only requires one reference.
再往下看,我看到:
All lists, arrays and strings are passed in and out of built-in functions by reference.
我无法理解这两个。
newLISP 如何“不依赖于垃圾收集算法”,而通过引用传递事物?
例如,在循环引用的情况下它会做什么?!
LISP 甚至 可能 不使用垃圾回收,而不会降低性能吗? (我假设你总是可以按值传递东西,或者你总是可以在你认为可能有必要时执行全堆扫描,但在我看来这会疯狂地损害你的性能。)
如果是这样,它将如何处理循环引用?如果不是,它们是什么意思?
最佳答案
或许在读书http://www.newlisp.org/ExpressionEvaluation.html有助于理解 http://www.newlisp.org/MemoryManagement.html纸更好。关于循环引用:它们在 newLISP 中不存在,无法创建。性能问题在该内存管理论文的一个子章节中解决,此处:http://www.newlisp.org/benchmarks/
可能正在使用 newLISP 进行工作和试验 - 即尝试创建循环引用 - 将解决大部分问题。
关于memory-management - newLISP 是否使用垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189869/