Sugeriría también mirar thread safe blocking queue de Christophe Grand; es menos de 20 líneas, pero contiene mucha funcionalidad y, en mi opinión, demuestra el uso experto de algunas de las características de simultaneidad, inmutabilidad, átomos y secuencias diferidas de Clojure.
Considere que la alternativa Java java.util.concurrent.LinkedBlockingQueue is 842 lines del código comentado sutil (posiblemente complejo), y usted comienza a entender cómo Clojure realmente cumple con su promesa de simultaneidad; elevando significativamente el nivel de abstracción y entregando una implementación correcta con aproximadamente 10-20 veces menos código.
También notará que al leer el código de Java es muy difícil ver el bosque por los árboles ... Si se le diera, ¿podría estar seguro de su corrección mirándolo? También tenga en cuenta que este código fue escrito por Doug Lea (podría decirse que es el principal experto en Java Concurrency) y es muy legible para Java; Dudo mucho que pueda escribir un código de rendimiento legible como este en Java rápidamente y estar seguro de su corrección.
Contraste esto con la versión Clojure y una vez que esté familiarizado con los fundamentos de Clojure es fácil de entender y entender cómo funciona ... En 20 minutos pude entender cada línea de la implementación, y estar seguro de su exactitud. Y ahora que estoy mucho más familiarizado con las expresiones idiomáticas de Clojure y FP, supongo que esto me llevaría más cerca de 5 minutos. Probablemente también podría escribir código "correcto" como este en Clojure en horas o minutos.
Christophes clojure wrapper de la clase java anterior también es instructivo ya que comparte la misma interfaz funcional que la primera versión.
Un buen blog sobre cómo explicar las características: https: //perkss.github.io/#/clojure/ConcurrencyClojure # text-body – Matt