Clojure China

Clojure 的值对比是怎样做的? 性能如何?

#1

JavaScript 里的变量是 mutable 的, 因而有个 shallow equal 和 deep equal 的差别,
一个是对比引用是不是一样, 另一个是递归对比所有的数据,
后者就是性能很差啦, 而前者存在用户不小心修改之类的不确定因素…

Clojure 看起来是自动对比全部的数据的, 而不是依赖引用
这样的话, 内部对比的算法如何? 当数据比较多的时候, 性能开销如何?

#2

在 Clojure Google Group 看到个相关的问题:equality checking of clojure data structures

像 om 中的高性能的对比应该是当两个数据共享了很多子数据结构时,那些共享的子数据结构可以通过引用来进行快速对比。
可以参考这里:Persistent data structure

2赞