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

欢迎!请参阅 关于 页面以了解更多关于其如何工作的信息。

0
规范

这段示例代码会在不太长的输入上耗尽内存,并且似乎在耗尽之前会指数级变慢。如果不是错误,它也是测试套件的实用示例。

`
(s/def ::thing
(s/+ (s/alt :x (s/+ (set (range 70))))))

(time (s/conform ::thing (range 10))) ;; 30ms
(time (s/conform ::thing (range 15))) ;; 500ms
(time (s/conform ::thing (range 20))) ;; 24s
`

由用户 @petrus 在 Clojurians Slack 上捕获,由 Max Penet 简化。

3 个答案

0

由 mpenet 制作评论

该示例可以简化为

`
(s/def ::thing
(s/+ (s/alt :x (s/+ (set (range 70))))))

(time (s/conform ::thing (range 10))) ;; 30ms
(time (s/conform ::thing (range 15))) ;; 500ms
(time (s/conform ::thing (range 20))) ;; 24s
`

0

由 gshayban 制作评论

感谢 Max,已简化!

0
参考: https://clojure.atlassian.net/browse/CLJ-2327 (由 gshayban 报告)
...