Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Strange that synchnronization is used at all in lazy-seq

The docs do not mention any synchronization: https://clojure.github.io/clojure/clojure.core-api.html#cloj...



> a Seqable object that will invoke the body only the first time seq is called, and will cache the result and return it on all subsequent seq calls.

To guarantee "only the first time", I suppose you need to have some kind of synchronization at some level.


For multithreaded access yes.

I meant that the docs do not mention thread safety.


"All of the Clojure collections...are efficient and inherently thread-safe."

https://clojure.org/reference/data_structures#Collections

"Seqs differ from iterators in that they are persistent and immutable, not stateful cursors into a collection. As such, they are useful for much more than foreach - functions can consume and produce seqs, they are thread safe, they can share structure etc."

https://clojure.org/reference/sequences

I think it's a fundamental enough property of clojure data structures that it would be redundant to mention it in every docstring.


Thanks, that's convincing.

(why I was in doubt, is because while immutable functional collections that clojure embaces are naturally thread-safe, there is an imperative aspect in creation of a lazy sequence from user provided function, and I was not sure clojure has to provide synchronization guarantees here)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: