2014-09-20 138 views
2

是否有一種可移植(跨實現)的方式在CL中創建弱引用? 如果沒有,我應該使用什麼替代方法來避免不必要的聽衆引起的內存泄漏,而這些內存泄漏只是通過訂閱事件而保持活力? 在我的具體情況中,所述收聽者用於實現功能性反應節點(即沒有副作用,僅對他們的存儲值有用),因此手動取消訂閱將相當不雅觀。Common Lisp弱引用?

+5

也許這個:http://common-lisp.net/project/trivial-garbage/ – uselpa 2014-09-20 17:14:51

+0

有趣的問題,但關於Stack OVerflow的主題:「問題要求我們推薦或找到一本書,工具,軟件庫,教程或其他非現場資源對於堆棧溢出而言是無關緊要的,因爲它們傾向於吸引自以爲是的答案和垃圾郵件,而是描述問題以及迄今爲止解決問題的方法。「你可以試試comp.lang.lisp,lispforum網站或#lisp。 – 2014-09-20 18:07:59

+0

@JoshuaTaylor,我認爲他的問題非常清楚 - 他正在編寫被動代碼,他的處理程序正在阻止他的節點被垃圾收集。簡單的解決方案將是使用弱引用,並且他問如何輕鬆地編寫它們。 – jch 2014-10-12 13:07:01

回答

1

弱引用沒有被ANSI標準化,雖然大多數實現都有創建弱引用的方法,但是提供的抽象是不同的。例如,CMUCL,CLISP和SBCL都提供弱引用(「弱指針」),而Franz具有弱引導,Clozure具有值弱的哈希表。

有一些庫聲稱爲一系列實現中的弱指針提供可移植接口。我不知道他們有多好。