memory-management - newLISP 是否使用垃圾回收?

标签 memory-management garbage-collection lisp newlisp

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/

相关文章:

matrix - 将函数输出作为 lisp 中矩阵转置的另一个函数参数传递

memory - MMU 和内存 Controller 的区别

java - 使用 VM 命令行在执行期间找到最大分配的堆大小?

lisp - Common LISP代码解释

node.js - Node 在简单循环中内存不足

java - PermGen 抑制的后果

macros - lisp 代码宏输出中的引号

c++ - 呈现 QWidgets 时出现大量页面错误

objective-c - iOS - XML 解析内存泄漏

iphone - EXC_BAD_ACCESS 错误,内存管理问题