2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面了解更多关于此功能的信息。

0
ClojureScript

目标是为基于 JavaScript Typed Arrays 的 clojure.core/Vec 添加支持。

我的希望是,这将允许从现有的 Typed Arrays 无需中间转换为通常的 JavaScript 数组中高效地创建向量,当需要时,通过增强的 cljs.core/into-array 将向量的组合数组的重新组合到 Typed Array 中,以提高效率。

实现主要基于 clojure/core/gvec.clj、cljs.core/PersistentVector 和 cljs.core/TransientVector。

性能应与 cljs.core/PersistentVector 相当,尽管与 js/Array 相比,TypedArray 实例化有额外的常数开销。

添加 cljs.core/Vec、cljs.core/TransientVec、cljs.core/vector-of 并更新 cljs.core/into-array。

4 个答案

0

由 adrianm 发布的评论:

我还需要测试,测试完成后我将更新问题。我只是想尽快将我的第一个补丁提交审查。

0

由 favila 发布的评论:

没有提及 Uint8ClampedArray。

Vec 类型或范围检查赋值吗?在 Clojure 中这些将失败(即使与 unchecked-math 一起)
(vector-of :byte 128) 返回 (链接: -128)
(vector-of :byte "1") 返回 (链接: 1)
* (vector-of :byte (js-obj)) 返回 (链接: 0)

如果我们打算通过CLJS API公开主机原始数组,是否也应该像对{{into-array}}所做的那样,将各种其他数组函数与Clojure(以及ClojureCLR,它还有如uint,ubyte等额外类型)保持一致?这些问题中的某些可能需要另一个工单,甚至可能是一个设计页面。

  • make-array忽略了类型参数,并且缺乏高维度。
  • object-array、int-array等可能应该返回TypedArrays。
  • 缺少ubyte-array、ushort-array、uint-array(类似于ClojureCLR)。
  • 缺少aset-*设置器。(在js中无意义,除非我们进行范围检查。)
  • aclone和amap在Clojure中保留输入数组类型,但在cljs中不保留。
  • 缺少数组转换器:bytes、shorts、chars、ints等。
  • 当我们 doing these,原始强制函数(例如int、long、unchecked-int等)要么是空操作,要么与clojure不同。(例如,cljs中的int类似于clojure中的unchecked-int,但cljs中的unchecked-int不起作用)。也许应该删除这些或使它们与javascript的ToInt32、ToInt16等抽象操作(即用于分配到TypedArrays的操作)相匹配。也许这些还与java语义相匹配?
0

评论者:mfikes

补丁1153.patch不再适用

0
参考:https://clojure.atlassian.net/browse/CLJS-1153(由adrianm报告)
...