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 设计留在单独的条目中?

今天自己也遇到了这个问题。在.clj文件中输入了`uuid`,希望构造一个uuid,就像在ClojureScript中做过的一样。导入`java.util.UUID`并调用`UUID/fromString`一切正常,但如果`uuid`是`clojure.core`函数,那就太好了。在`clojure.core`中对`random-uuid`(我们现在使用的是`UUID/randomUUID`)进行+1也是为了可移植性。
0

评论人:alexmiller

我认为做这件事的主要原因可能是便携性。最好生成 java.util.UUIDs - 这是否与 ClojureScript 中的做法相一致?也就是说,用于创建和 `使用` uuids 的相同代码能在两个平台上工作吗?如果不是,那么可能没有做好这件事的理由。

0

评论人:[email protected]

最好生成 java.util.UUIDs - 这是否与 ClojureScript 中的做法相一致?

ClojureScript 定义了自己的 UUID 类型,因为 JavaScript 中不存在。 https://github.com/clojure/clojurescript/blob/dd589037f242b4eaace113ffa28ab7b3791caf47/src/main/cljs/cljs/core.cljs#L10088-L10128. 我不是很清楚你所说的“相一致”是指什么。

也就是说,用于创建和使用的uuids的相同代码能在两个平台上运行吗?

CLJS UUID 不支持 Java UUID 的所有方法,但重要的事情都在那里(等价性、从字符串构建、将字符串打印出来),这将足够显著提高处理 UUIDs 的便携性。

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() - 只有在Time UUID中才有用
static UUID    randomUUID() - 将实现此功能
long    timestamp() - 时间基础的UUID
String    toString() - 无需操作
int    variant() - 用于区分不同类型的UART
int    version() - 用于区分不同版本的UART



我可能认为在这里也包括基于时间的UART的优点,但我不确定它们是否足够常用以至于值得这么做,而且它们还需要被纳入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函数,不如考虑问题是:我们如何将可移植的uuid支持添加到Clojure/ClojureScript中?这是一项更大的工作,但在我看来更有价值。

因此,也应该考虑(其中一些已经存在,但可能未经过可移植性测试)
- 构建
- 打印 - 打印,pr,美化打印
- 读取
- 哈希码
- 转换为/从位
- 转换为/从字符串
- 提取组件

然后我想考虑这部分应在核心还是data.uuid或某些东西中。

我认为最好在设计页面而不是这里工作(这张票只是更大问题的一个单元)。也许http://dev.clojure.org/pages/viewpage.action?pageId=950382可以提供一些线索。

0
...