欢迎!有关此功能的更多信息,请参阅关于页面。
由{{vector-of}}生成的基本类型向量不支持短暂状态。
core.rrb-vector为基本类型向量实现了短暂状态支持。可以通过多种方式获取已启用短暂状态的基本类型向量:(1) 使用gvec实例作为{{fv/catvec}}(如果发生RRB连接,这并不保证)或{{fv/subvec}}的参数;(2) 将gvec实例传递给{{fv/vec}},从core.rrb-vector 0.0.11版本开始,这会将gvec树简单地包裹在一个RRB包装器中;(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:短暂状态,gvec的哈希缓存,gvec序列的对象方法
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。或者,在我的情况下,无法创建由长整数数组支持的十六进制数字的gvec。参见 https://gist.github.com/brandonbloom/441a4b5712729dec7467
感谢指出!已附上修复补丁。(实际上editableArrayFor中确实有一个更多的bug,也已在这个版本中修复。)
至于nibbles的gvecs,这能作为一个单独的票项,基于这个补丁构建一些补丁吗?
另外,core.rrb-vector作为附加功能,可以支持nibbles向量(如果内置的gvec在某个时间点确实支持这个功能,可以使用内置gvec的表示)。你认为这会有用吗?