10

这个页面让我很困惑。

它说:

newLISP 中的内存管理不依赖于垃圾回收算法。内存没有标记或引用计数。相反,在创建内存对象后立即决定是否删除新创建的内存对象。

newLISP 遵循一个仅引用 (ORO) 规则。一旦 newLISP 在表达式评估期间达到更高的评估级别,每个未被符号引用的内存对象都将过时。newLISP 中的对象(不包括符号和上下文)通过值复制传递给其他用户定义的函数。因此,每个 newLISP 对象只需要一个引用。

再往下看,我看到:

所有列表、数组和字符串都通过引用传入和传出内置函数。

我无法理解这两个。

newLISP 怎么能“不依赖垃圾收集算法”,但通过引用传递东西?
例如,在循环引用的情况下它会做什么?!

LISP甚至有可能不使用垃圾收集,而不会使性能下降吗?(我假设您始终可以按值传递事物,或者您始终可以在您认为可能有必要时执行全堆扫描,但在我看来,这会严重损害您的性能。)
如果是这样,它会如何处理循环引用?如果不是,它们是什么意思?

4

1 回答 1

12

也许阅读http://www.newlisp.org/ExpressionEvaluation.html有助于更好地理解http://www.newlisp.org/MemoryManagement.html论文。关于循环引用:它们在 newLISP 中不存在,无法创建它们。性能问题在该内存管理论文的一个子章节中得到解决,这里是:http: //www.newlisp.org/benchmarks/

可能正在使用 newLISP 进行工作和试验——即尝试创建循环引用——将解决大部分问题。

于 2012-06-25T16:05:04.300 回答