欢迎!有关如何使用本站的信息,请参阅关于页面。
使用{{vector-of}}产生的原始数据向量不支持转瞬态。
core.rrb-vector实现了对原始数据向量的转瞬态支持。可以通过以下几种方式获取这类带转瞬态支持的原始数据向量:(1)将gvec实例作为{{fv/catvec}}的参数(如果发生RRB连接,这并不保证)或{{fv/subvec}}; (2)将gvec实例传递给{{fv/vec}},从核心.rrb-vector 0.0.11版本开始,这将简单地用RRB包装器包装gvec树;(3)使用{{fv/vector-of}}代替{{clojure.core/vector-of}}。作为使支持的功能在向量类型之间保持一致的举措(参见CLJ-787),在gvec中的本地支持仍然有用;gvec也更简单,并且仍然具有(并可能继续保持)性能优势。
此处提供了将core.rrb-vector的转瞬态支持移植到gvec的版本
https://github.com/michalmarczyk/clojure/tree/transient-gvec
将很快将其更新到当前主版本。
请参阅clojure-dev帖子中的一些基准测试
https://groups.google.com/d/msg/clojure-dev/9ozYI1e5SCM/BAIazVOkUmcJ
评论人:michalmarczyk
这是补丁的当前版本(0001-CLJ-1416-transients-hash-caching-for-gvec-Object-met.patch)。它还包括一些额外的更改,以下是提交信息
{quote}CLJ-1416:转瞬态,gvec的哈希缓存,gvec序列的对象方法
https://github.com/michalmarczyk/clojure/tree/transient-gvec-1.6
这是一个更新的补丁,其中包括一些额外的互操作相关改进。
新的提交信息
{quote}CLJ-1416:对gvec的transients、哈希缓存和互操作性的改进
评论者:jafingerhut
2014年7月5日的补丁0002-CLJ-1416-transients-hash-caching-interop-improvement.patch在2014年8月29日对Clojure进行了一些提交之后,不再干净地应用到了最新master上。在此之前是干净的。
我还没有检查更新这个补丁可能会多么容易或困难。请参阅本页面的“更新过时的补丁”部分,以获取有关更新补丁的一些提示:http://dev.clojure.org/display/community/Developing Patches
补丁已更新,现在可以干净地应用到master上。
评论者:bbloom
也许这应该是一个新的工单,但会影响这个补丁,所以我在这儿提一下
ArrayManager接口是一个不完整的抽象。原始gvec代码以及新的transients代码路径依赖于System/arraycopy,而不是依赖于管理对象的.arraycopy。这意味着不可能创建由非JVM数组支持的gvec。或者换句话说,在我的情况下,不可能创建由long数组支持的nibbles gvec。请参阅https://gist.github.com/brandonbloom/441a4b5712729dec7467
感谢指出!已修复的补丁已附加。实际上,editableArrayFor中还有一个bug,也在这次版本中修复了。
关于nibbles的gvec,这能否作为一个单独的工单,基于这个工单进行补丁构建呢?
另外,core.rrb-vector可以作为一个额外的功能支持nibbles的向量(如果内置的gvec将来支持这个功能,就采用内置gvec的表示)。你认为这会有用吗?