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

欢迎!请在关于页面上了解更多关于这个功能的信息。

+2
Clojure
已关闭

ClojureScript 具有 {{uuid}} 和 {{random-uuid}} 函数。将这些函数添加到 ClojureScript 中将非常方便,我认为这同样有利于 Clojure,以提高代码的可移植性。您是否有兴趣为这个特性做出补丁?

注:Clojure 1.11.0-alpha3 添加了 `random-uuid` 和 `parse-uuid` 函数

8 个答案

+1

评论者:wilkerlucio

(链接:~alexmiller) 我理解让它们完全兼容是个好主意。但坦白说,作为一个写了很多 CLJC 的用户,如果我们只有 uuidrandom-uuid(特别是后者),就能解决我 99% 的 UUID 需求,我认为对大多数人来说也是一样的。我们能不能首先添加那些对所有人都有益的函数,并把详细设计的 UUID 作为一个单独的 ticket 处理?

今天我自己也遇到了这个问题。在.clj文件中输入了`uuid`,希望像在ClojureScript中做过那样,从字符串构造UUID。导入`java.util.UUID`并调用`UUID/fromString`效果良好,但如果`uuid`是一个`clojure.core`函数,那就太棒了。另外,我非常赞成在`clojure.core`中实现`random-uuid`(代替我们现在使用的`UUID/randomUUID`),这有助于提高可移植性。
0

评论由:alexmiller 撰写

我这样做的主要原因是可移植性。最合理的是生成`java.util.UUID`,这和ClojureScript中正在做的事情是协调的吗?也就是说,创建和使用UUID的代码能在两个平台上同时工作吗?如果不能,那么这样做的理由可能就不是很好的。

0

评论由:[email protected] 撰写

最合理的是生成`java.util.UUID`,这和ClojureScript中正在做的事情是协调的吗?

ClojureScript定义了自己的UUID类型,因为JavaScript中没有。请查看GitHub源代码。我不太明白您所说的“协调”是什么意思。

也就是说,创建和使用UUID的代码能在两个平台上同时工作吗?

CLJS的UUID不支持Java UUID的所有方法,但重要的功能都有(等价性、从字符串构建、转换成字符串),这足以显著提高使用UUID时的可移植性。

0

评论由:bronsa 撰写

clojure和clojurescript都有对UUID的标记字面量,这应该已经足够用于交互。

0

评论由:alexmiller 撰写

我意识到了这一点,只是想知道是否有需要在UUID上调用的函数,需要提供可移植的等效功能,就像这里所示的内容。

0
[email protected] 撰写的评论

这里的大部分额外方法都很有用,可以用来区分多种类型的UUID,或者从基于时间的UUID中获取信息。


clockSequence() - 基于时间的
compareTo(UUID val) - 不确定是否需要等价物?
boolean    equals(Object obj) - 无操作要求
static UUID    fromString(String name) - 构造器
long    getLeastSignificantBits() - 两者的重要性不确定
long    getMostSignificantBits()
int    hashCode() - 无操作要求
static UUID    nameUUIDFromBytes(byte[] name) - 有用/重要吗?
long    node() - 仅适用于基于时间的UUID
static UUID    randomUUID() - 将实现此功能
long    timestamp() - 基于时间的UUID
String    toString() - 无操作要求
int    variant() - 用于区分不同类型的UUID
int    version() - 用于区分不同版本的UUID



我可能看到把基于时间的UUID包括在这个补丁中的理由,但我不确定它们是否足够常用,以至于值得这么做,而且它们还需要放入CLJS等。

Clojure代码中使用了这些方法中的一些
https://github.com/search?l=clojure&q=.getLeastSignificantBits&type=Code&utf8=✓
https://github.com/search?utf8=✓&q=%22.nameUUIDFromBytes%22+language%3Aclojure&type=Code&ref=searchresults

但只有实际的构造器的大约1/100
https://github.com/search?utf8=✓&q=java+util+UUID+language%3Aclojure&type=Code&ref=searchresults(这是一个有缺陷的搜索查询,但这是我所能做到的最好的)。
0

评论由:alexmiller 撰写

我认为我的主要观点是:与其仅仅考虑uuid/random-uuid这些函数,不如把问题看作:我们如何在Clojure/ClojureScript中添加可移植的UUID支持?这是一项更多的工作,但在我看来更有价值。

因此,也需要考虑以下这些(其中一些已经存在,但可能还没有经过便携性测试)
- 构建
- 打印 - 打印、pr、pretty print
- 读取
- 哈希码
- 转换为/从位
- 转换为/从字符串
- 提取组件

然后我认为考虑多少应该放在核心中,多少应该在data.uuid或类似的库中是有意义的。

我认为最好在工作页面上进行这项工作(这个条目只是更大问题的一个单元)。也许http://dev.clojure.org/pages/viewpage.action?pageId=950382可以提供一些指导。

0
...