oli*_*ren 4 out-of-memory immutability ramda.js immutable.js
没关系redux或其他东西 - 我只是询问Immutable.JS,Ramda等.
如果通过结构共享创建数据结构的新版本,则意味着每个新版本都需要具有指向先前版本的指针,以便它能够共享任何内容.这再次意味着结构的旧版本不能被垃圾收集,这意味着,在具有状态的应用程序中,此状态将使用单调增加的内存量.如果是这种情况,那么该数据结构在某些时候将使用所有可用内存,如果它不断被修改.
我在这里错过了什么吗?我可以看到,对于Web上的许多(大多数)用例(在浏览器中),这不会是一个问题,因为您可能每次只更改结构的一小部分,并且您可能会离开页面或者在使用所有内存之前重新加载它,但对于长时间运行的进程,这应该会产生问题.对?Riiight?
如果通过结构共享创建数据结构的新版本,则意味着每个新版本都需要具有指向先前版本的指针,以便它能够共享任何内容.
这一般不正确.新版本将指向前一版本的子部分.所以,是一个分数(通常几乎是旧版本的所有数据).
例如,Ocaml的地图(由红黑树的一些自平衡二进制搜索树变体表示和实现)是不可变的:请参阅Map的文档.但是,如果您向地图添加(或删除)某些绑定,则会获得一个新地图,该地图与旧内部节点共享大部分(但不是全部)内部节点.
因此垃圾收集器最终将"删除"那些与当前"状态"无关的旧内部节点.
BTW网络编程(和网络导航)与延续和延续传递风格有关.参见例如Byrd的带有连续性的Web编程和C.Queinnec的几篇论文.
阅读有关函数式编程中monad的更多信息.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |