【发布时间】:2017-10-07 15:27:19
【问题描述】:
我是 clojure 的新手,我刚刚学习并尝试了 memorize 功能。 在我看来这个功能的存在很奇怪。
首先有副作用的函数以!结尾
其次使用memorize很简单
为什么clojure 不只是为我做这个?内存使用和性能之间存在平衡,但您可以轻松地让 clojure 运行时将一大块 ram 分配给函数结果。如果使用相同的参数多次调用一个函数,则使用缓存结果,如果内存耗尽,则清除缓存并跟踪缓存命中,因此频繁调用的函数不太可能从缓存中删除。
如果我设计了这个,我什至会为函数设置一个最低性能级别,这样如果函数调用比缓存检索更快,它就不会被缓存。 (或者让它成为所有函数调用如何工作的属性。)
谁能解释为什么clojure不这样做
谢谢
【问题讨论】:
-
如果您可以将此功能添加到编译器中,您会为 Clojure 社区感到高兴。请记住,Clojure(不像 - 比如说 - Haskell)不会强制函数是纯函数。
-
我认为没有人会对此感到高兴。它有很多问题。您几乎会立即填满内存,例如,缓存一堆没人关心的无用垃圾,没有空间缓存一两个有用的东西。此外,您会为每个函数调用添加大量开销以进行缓存,并测量“最低性能水平”以确定事物是否值得缓存。性能将变得更加难以推理,因为每个函数的运行时都变得不确定。副作用函数运行“如果感觉喜欢”。
标签: clojure