此页一直让我很困惑。
上面写着:
newLISP中的内存管理不依赖垃圾收集算法。内存未被标记或引用计数.相反,是否删除新创建的内存对象的决定是在内存对象创建后立即做出的。 newLISP遵循一个只引用(ORO)规则。在表达式计算期间,一旦newLISP达到更高的计算级别,符号未引用的每个内存对象都会被淘汰。newLISP中的对象(不包括符号和上下文)通过值复制传递给其他用户定义的函数。因此,每个newLISP对象只需要一个引用。
再往下看,我看到:
所有的列表、数组和字符串都是通过引用传递给内建函数的.
我搞不懂这两个。
newLISP怎么能“不依赖垃圾收集算法”,却又通过引用传递东西呢?
例如,在循环引用的情况下,它会做什么?!
LISP是否有可能不使用垃圾收集,而不降低性能呢?(我想你总是可以按值传递东西,或者每当你认为有必要的时候,你都可以执行一次全堆扫描,但在我看来,这会极大地损害你的表现。)
如果是这样,它将如何处理循环引用?如果没有,这是什么意思?
发布于 2012-06-25 16:05:04
也许阅读http://www.newlisp.org/ExpressionEvaluation.html有助于更好地理解http://www.newlisp.org/MemoryManagement.html论文。关于循环引用:它们不存在于newLISP中,因此无法创建它们。性能问题在内存管理论文的一个小节中讨论,这里是:http://www.newlisp.org/benchmarks/。
可能正在进行newLISP的工作和实验--即尝试创建一个循环引用--这将澄清大多数问题。
https://stackoverflow.com/questions/11189869
复制相似问题