我是clojure的新手,我刚学过记忆功能并进行了实验。 在我看来,这个功能的存在是奇怪的。为什么我们有clojure memoize功能?
首先带副作用的功能以!
其次使用记忆很简单
为什么不Clojure的只是这样做对吗?在内存使用和性能之间有一个平衡点,但是你可以很容易地让clojure运行时将一块内存分配给函数结果。如果多次使用相同的参数调用一个函数使用缓存的结果,如果内存耗尽清除缓存并跟踪缓存命中,那么频繁调用的函数不太可能从缓存中移除。
如果我设计了这个功能,我甚至会为函数设置一个最低性能级别,这样如果函数调用比缓存检索更快,它不会被缓存。 (或者使这所有的功能如何调用工作性质。)
任何人都可以解释为什么Clojure中并没有这样做
感谢
如果您可以将此功能添加到编译器中,您将会高兴Clojure社区。请记住Clojure(不像 - 说 - Haskell)不强制*函数是纯粹的。 – Thumbnail
我不认为任何人都会为此感到高兴。它有很多问题。你几乎可以立即填满内存,例如,缓存一堆没人关心的无用垃圾,没有余地缓存一两件有用的东西。此外,每次函数调用都会增加大量开销以执行缓存,并测量“最低性能级别”以决定是否值得缓存。由于每个函数的运行时间变得不确定,因此性能会变得难以推理。副作用函数运行“如果感觉像”。 – amalloy