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

欢迎!请参阅 关于 页面以获取更多关于此工作方式的信息。

+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`)。
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

但远没有直接的构造函数使用频率高,大约低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、美化打印
- 读取
- 哈希码
- 位转换
- 字符串转换
- 元素提取

然后我认为值得考虑这些中哪些应该放在核心中,哪些应该放在 data.uuid 或类似的地方。

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

0 票数
...