2012-06-25 69 views
10

This page對我來說一直很困惑。newLISP使用垃圾回收嗎?

它說:在newLISP

內存管理不依賴於一個垃圾收集算法。內存未標記或引用計數。而是在創建內存對象後立即決定是否刪除新創建的內存對象。

newLISP遵循一個僅供參考(ORO)規則。在表達式評估期間,一旦newLISP達到更高的評估級別,每個未被符號引用的內存對象就會過時。 newLISP中的對象(不包括符號和上下文)通過值複製傳遞給其他用戶定義的函數。因此,每個newLISP對象只需要一個引用。

再往下,我看到:

所有列表,數組和字符串進出的內置函數按引用傳遞。

我無法理解這兩者。

newLISP如何「不依靠垃圾收集算法」,而是通過引用傳遞事物?
例如,它將在循環引用的情況下做什麼?

是否即使可能爲LISP不使用垃圾回收,沒有使性能下降? (我認爲你總是可以通過價值來傳遞事物,或者你可以隨時執行全堆掃描,只要你認爲它可能是必要的,但在我看來,這樣會瘋狂地傷害你的表現。)
如果是這樣,如何它會處理循環引用嗎?如果不是,他們是什麼意思?

回答

12

也許閱讀http://www.newlisp.org/ExpressionEvaluation.html有助於更好地理解http://www.newlisp.org/MemoryManagement.html紙。關於循環引用:它們不存在於newLISP中,因此無法創建它們。性能問題在該內存管理論文的子章節中討論,並在這裏:http://www.newlisp.org/benchmarks/

可能正在運行並試驗newLISP - 即嘗試創建循環引用 - 將清除大部分問題。

+0

頭腦風暴!那麼不是所有的LISP都有循環引用?!沒有看到那個人來。 :) +1肯定值得大量upvotes。謝謝! – Mehrdad