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

欢迎!请查看关于页面以获取有关这是如何工作的更多信息。

+2
Clojure
已关闭

ClojureScript有{{uuid}}和{{random-uuid}}函数。这些在ClojureScript中有用,我认为在Clojure中也很实用,可以提高代码的可移植性。这个补丁有兴趣吗?

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

8 答案

+1

评论者:wilkerlucio

(链接:~alexmiller) 我理解使其完全兼容的想法很棒。但说实话,作为一个编写大量CLJC的用户,如果我们只有uuid和random-uuid(尤其是后者),就可以解决我99%的UUID需求,我认为对于大多数人来说也是一样。我们不能先添加那些对于所有使用者的肯定胜利,而把详细设计的UUID事情放在单独的票据上吗?

今天我自己也遇到了这个问题。在`.clj`文件中输入了`uuid`,希望从字符串中构建uuid,就像在ClojureScript中做的那样。导入`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中没有。详情请见https://github.com/clojure/clojurescript/blob/dd589037f242b4eaace113ffa28ab7b3791caf47/src/main/cljs/cljs/core.cljs#L10088-L10128。我不太清楚你所说的协调是指什么。

也就是说,创建和使用的uuid的同一代码是否可以在两个平台上工作?

CLJS的UUID不支持所有的Java UUID方法,但重要的东西都在(等价性、从字符串构造、将字符串写入字符串)并且这将极大地提高在处理UUID时的可移植性。

0

评论由:bronsa做出

clojure和clojurescript都有uuid标签字面量,这对互操作来说应该足够好了。

0

评论由:alexmiller做出

我知道这一点,只是想知道是否有任何在uuid上需要可移植等价函数的调用,比如在http://docs.oracle.com/javase/8/docs/api/java/util/UUID.html中提到的那些。

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

但不到文本构造函数的百分之一
https://github.com/search?utf8=✓&q=java+util+UUID+language%3Aclojure&type=Code&ref=searchresults(这是一个有缺陷的搜索查询,但是我能做到的最好的)。
0

评论由:alexmiller做出

我的主要观点可能是:与其仅仅考虑uuid/random-uuid函数,不如将问题视为:我们如何才能添加Clojure/ClojureScript的便携UUID支持?这需要更多的工作,但在我个人看来更有价值。

我们还想考虑以下内容(一些已经存在,但可能没有经过便携性的测试)
- 构造
- 打印 - 打印、pr、美化打印
- 读取
- 哈希码
- 转换到/从位
- 转换到/从字符串
- 提取组件

然后我认为考虑将这些放在core与data.uuid或其他项目中更有意义。

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

0
参考:[https://clojure.atlassian.net/browse/CLJ-1925](https://clojure.atlassian.net/browse/CLJ-1925)(由[email protected]投稿)
...