欢迎!请参阅关于页面,了解有关如何使用本站的更多信息。
由 {{vector-of}} 生成的原始数据向量不支持短暂性。
core.rrb-vector 实现了对原始数据向量短暂性的支持。可以通过多种方式获得这种短暂性启用的原始数据向量:(1) 使用 gvec 实例作为 {{fv/catvec}} (如果发生 RRB 连接,这并不保证) 或 {{fv/subvec}} 的参数;(2) 将 gvec 实例传递给 {{fv/vec}},自 core.rrb-vector 0.0.11 版以来,这会简单地用 RRB 包装器重包装 gvec 树;(3) 使用 {{fv/vector-of}} 而不是 {{clojure.core/vector-of}}。在 gvec 中保留本地支持仍然有用,可以作为努力使支持的功能一致性的一个组成部分(参见与此相关的 CLJ-787);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: transients,gvec 的 hash 缓存,gvec 序列的 Object 方法
https://github.com/michalmarczyk/clojure/tree/transient-gvec-1.6
这是一个包含一些额外互操作性改进的更新补丁。
新的提交信息
{quote}CLJ-1416:临时变量、哈希缓存以及对gvec的互操作性改进
评论者:jafingerhut
补丁0002-CLJ-1416-transients-hash-caching-interop-improvement.patch于2014年7月5日发布,在2014年8月29日Clojure提交了一些更改后,无法干净地应用于最新的master分支。在此之前,它可以干净地应用。
我没有检查更新该补丁的难易程度。请参阅本页面的“过时补丁更新”部分,以了解一些更新补丁的技巧:http://dev.clojure.org/display/community/Developing Patches
补丁已更新并干净地应用于master分支。
评论者:bbloom
也许这是一个单独的票据,但它将影响此补丁,因此我将在此提及。
ArrayManager接口是一个不完整的抽象。原始的gvec代码以及新的临时代码路径依赖于System/arraycopy,而不是管理对象上的.arraycopy。这意味着无法创建由非JVM数组支持的gvec。或者,按照我的情况,创建由long数组支持的nibble的gvec。请参阅https://gist.github.com/brandonbloom/441a4b5712729dec7467
感谢指出!修复的补丁已附上。(实际上,editableArrayFor中还有一个错误,也在这个版本中修复了。)
至于 nibble 的 gvec,这能作为一个独立的需求和补丁建在这个基础上吗?
另外,core.rrb-vector 可以作为附加功能支持 nibble 向量(如果内建的 gvec 最终支持此功能,则采用内建 gvec 的表示)。你认为这会有用吗?