欢迎!请参阅关于页面了解更多关于此操作的信息。
由{{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}}。Native支持在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 seqs
https://github.com/michalmarczyk/clojure/tree/transient-gvec-1.6
这是一个包含一些互操作相关改进的更新补丁。
新的提交消息
{quote}CLJ-1416:瞬态,哈希缓存,互操作改进gvec
评论由:jafingerhut发表
2014年7月5日发布的补丁0002-CLJ-1416-transients-hash-caching-interop-improvement.patch,在2014年8月29日对Clojure进行某些提交之后,已无法干净地应用于最新主分支。在此之前可以干净地应用。
我没有检查更新此补丁的难易程度。有关更新补丁的提示,请参阅本页面上的“更新过时补丁”部分: http://dev.clojure.org/display/community/Developing Patches
已将补丁更新为可干净地应用于主分支。
评论由:bbloom发表
这可能应该是一个单独的票据,但它将影响此补丁,所以我会在下面提到它
ArrayManager接口是一个不完整的抽象。原始的gvec代码以及新的transients代码路径依赖于System/arraycopy,而不是manager对象上的.arraycopy。这意味着无法创建由非JVM数组支持的gvec。或者,按照我的情况,无法创建由长整型数组支持的十六进制字节码的gvec。见 https://gist.github.com/brandonbloom/441a4b5712729dec7467
感谢您发现这个问题!已修复补丁附带。实际上,editableArrayFor中还有一个错误,也已在本版本中修复。
至于 nibbles 的 gvecs,这应该是一个单独的工单,其补丁构建在这个基础上吗?
另外,core.rrb-vector 可以作为额外功能支持 nibbles 的向量(并且如果在某个时候内置的 gvec 开始支持此功能,可以采用内置的 gvec 表示法)。你认为这会很有用吗?