stringtranslate.com

Clojure

Clojure ( / ˈk l ʒ ər / , como cierre ) [17] [18] es un dialecto dinámico y funcional del lenguaje de programación Lisp en la plataforma Java . [19] [20 ]

Al igual que la mayoría de los otros Lisp, la sintaxis de Clojure se basa en expresiones S que primero son analizadas en estructuras de datos por un lector Lisp antes de ser compiladas . [21] [17] El lector de Clojure admite sintaxis literal para mapas , conjuntos y vectores junto con listas, y estos se compilan directamente en las estructuras mencionadas. [21] Clojure trata el código como datos y tiene un sistema de macros Lisp . [22] Clojure es un Lisp-1 y no está destinado a ser compatible con el código de otros dialectos de Lisp, ya que utiliza su propio conjunto de estructuras de datos incompatibles con otros Lisp. [22]

Clojure defiende la inmutabilidad y las estructuras de datos inmutables y alienta a los programadores a ser explícitos sobre la gestión de la identidad y sus estados. [23] Este enfoque en la programación con valores inmutables y construcciones explícitas de progresión del tiempo tiene como objetivo facilitar el desarrollo de programas más robustos, especialmente concurrentes , que sean simples y rápidos. [24] [25] [17] Si bien su sistema de tipos es completamente dinámico , los esfuerzos recientes también han buscado la implementación de un sistema de tipos dependiente . [26]

El lenguaje fue creado por Rich Hickey a mediados de la década de 2000, originalmente para la plataforma Java; desde entonces, el lenguaje se ha adaptado a otras plataformas, como Common Language Runtime (.NET). Hickey continúa liderando el desarrollo del lenguaje como su benevolente dictador de por vida .

Historia

Rich Hickey, creador de Clojure

Rich Hickey es el creador del lenguaje Clojure. [19] Antes de Clojure, desarrolló dotLisp, un proyecto similar basado en la plataforma .NET , [27] y tres intentos anteriores de proporcionar interoperabilidad entre Lisp y Java : una interfaz de lenguaje extranjero Java para Common Lisp ( jfli), [28] una interfaz de objeto extranjero para Lisp (FOIL), [29] y una interfaz compatible con Lisp para servlets de Java (Lisplets). [30]

Hickey pasó cerca de dos años y medio trabajando en Clojure antes de lanzarlo al público en octubre de 2007, [31] gran parte de ese tiempo trabajando exclusivamente en Clojure sin financiación externa. Al final de este tiempo, Hickey envió un correo electrónico anunciando el lenguaje a algunos amigos de la comunidad Common Lisp.

El nombre de Clojure, según Hickey, es un juego de palabras con el concepto de programación " cierre " que incorpora las letras C, L y J para C# , Lisp y Java respectivamente, tres lenguajes que tuvieron una gran influencia en el diseño de Clojure. [18]

Diseño

Rich Hickey desarrolló Clojure porque quería un Lisp moderno para programación funcional , simbiótico con la plataforma Java establecida y diseñado para la concurrencia . [24] [25] [32] [17] También ha destacado la importancia de la simplicidad en el diseño de lenguajes de programación y arquitectura de software, abogando por el acoplamiento flexible , el polimorfismo a través de protocolos y clases de tipos en lugar de herencia , funciones sin estado que tienen espacios de nombres en lugar de métodos o la sustitución de la sintaxis por datos . [33] [34] [35]

El enfoque de Clojure para el estado se caracteriza por el concepto de identidades [23] , que se representan como una serie de estados inmutables a lo largo del tiempo. Dado que los estados son valores inmutables, cualquier número de trabajadores puede operar en ellos en paralelo, y la concurrencia se convierte en una cuestión de gestión de cambios de un estado a otro. Para este propósito, Clojure proporciona varios tipos de referencia mutables , cada uno con una semántica bien definida para la transición entre estados. [23]

Clojure se ejecuta en la plataforma Java y, como resultado, se integra con Java y admite totalmente la llamada de código Java desde Clojure, [36] [17] y el código Clojure también se puede llamar desde Java. [37] La ​​comunidad utiliza herramientas como la interfaz de línea de comandos (CLI) de Clojure [38] o Leiningen para la automatización de proyectos, lo que brinda soporte para la integración de Maven . Estas herramientas manejan la administración de paquetes de proyectos y dependencias y se configuran utilizando la sintaxis de Clojure.

Como dialecto de Lisp, Clojure admite funciones como objetos de primera clase , un bucle de lectura, evaluación e impresión (REPL) y un sistema de macros. [6] El sistema de macros de Lisp de Clojure es muy similar al de Common Lisp con la excepción de que la versión de Clojure de la comilla invertida (denominada "comilla de sintaxis") califica los símbolos con su espacio de nombres . Esto ayuda a evitar la captura de nombres no intencionada, ya que está prohibido el enlace a nombres calificados por espacios de nombres. Es posible forzar una expansión de macro de captura, pero debe hacerse explícitamente. Clojure no permite macros de lectura definidas por el usuario, pero el lector admite una forma más restringida de extensión sintáctica. [39] Clojure admite métodos múltiples [40] y para abstracciones similares a interfaces tiene un polimorfismo basado en protocolos [41] y un sistema de tipos de datos que utiliza registros [42] , lo que proporciona un polimorfismo dinámico y de alto rendimiento diseñado para evitar el problema de la expresión .

Clojure admite secuencias perezosas y fomenta el principio de inmutabilidad y estructuras de datos persistentes . Como lenguaje funcional , se pone énfasis en la recursión y las funciones de orden superior en lugar de los bucles basados ​​en efectos secundarios. La optimización automática de llamadas de cola no es compatible ya que la JVM no la admite de forma nativa; [43] [44] [45] es posible hacerlo explícitamente utilizando la recurpalabra clave. [46] Para la programación paralela y concurrente , Clojure proporciona memoria transaccional de software , [47] un sistema de agente reactivo , [1] y programación concurrente basada en canales . [48]

Clojure 1.7 introdujo los condicionales de lectura al permitir la incrustación de código Clojure, ClojureScript y ClojureCLR en el mismo espacio de nombres. [49] [21] Se agregaron transductores como un método para componer transformaciones. Los transductores permiten que las funciones de orden superior, como map y fold , se generalicen sobre cualquier fuente de datos de entrada. Si bien tradicionalmente estas funciones operan en secuencias , los transductores les permiten trabajar en canales y dejar que el usuario defina sus propios modelos para la transducción. [50] [51] [52]

Notación de datos extensible

La notación de datos extensible ( EDN , por sus siglas en inglés ) [53] es un subconjunto del lenguaje Clojure que se diseñó como formato de transferencia de datos. Se puede utilizar para serializar y deserializar estructuras de datos de Clojure, y Clojure en sí utiliza un superconjunto de EDN para representar programas.

edn se utiliza de forma similar a JSON o XML , pero tiene una lista relativamente grande de elementos integrados, que se muestran aquí con ejemplos:

Además de estos elementos, admite la extensibilidad mediante el uso de etiquetas , que consisten en el carácter #seguido de un símbolo. Al encontrar una etiqueta, el lector pasa el valor del siguiente elemento al controlador correspondiente, que devuelve un valor de datos. Por ejemplo, este podría ser un elemento etiquetado: #myapp/Person {:first "Fred" :last "Mertz"}, cuya interpretación dependerá del controlador apropiado del lector.

Esta definición de elementos de extensión en términos de los demás evita depender de la convención o del contexto para transmitir elementos no incluidos en el conjunto base.

Plataformas alternativas

La plataforma principal de Clojure es Java , [20] [36] pero existen otras implementaciones de destino. La más notable de ellas es ClojureScript, [54] que compila a ECMAScript 3, [55] y ClojureCLR, [56] un puerto completo en la plataforma .NET , interoperable con su ecosistema.

Otras implementaciones de Clojure en diferentes plataformas incluyen:

Herramientas

Las herramientas para el desarrollo de Clojure han mejorado significativamente a lo largo de los años. A continuación, se incluye una lista de algunos IDE y editores de texto populares con complementos que agregan compatibilidad con la programación en Clojure: [69]

Además de las herramientas proporcionadas por la comunidad, las herramientas oficiales de la interfaz de línea de comandos (CLI) de Clojure [38] también están disponibles en Linux , macOS y Windows desde Clojure 1.9. [83]

Desarrollo

El proceso de desarrollo está restringido al equipo central de Clojure, aunque los problemas son visibles públicamente en la página del proyecto JIRA de Clojure. [84] Cualquiera puede hacer preguntas o enviar problemas e ideas en ask.clojure.org. [85] Si se determina que un nuevo problema justifica un ticket de JIRA, un miembro del equipo central lo clasificará y lo agregará. Los problemas de JIRA son procesados ​​por un equipo de evaluadores y finalmente aprobados por Rich Hickey. [86] [87]

Impacto

Con el continuo interés en la programación funcional, la adopción de Clojure por parte de los desarrolladores de software que utilizan la plataforma Java ha seguido aumentando. El lenguaje también ha sido recomendado por desarrolladores de software como Brian Goetz, [88] [89] [90] Eric Evans, [91] [92] James Gosling , [93] Paul Graham , [94] y Robert C. Martin . [95] [96] [97] [98] ThoughtWorks , al evaluar los lenguajes de programación funcional para su Technology Radar, [99] describió a Clojure como "una implementación simple y elegante de Lisp en la JVM" en 2010 y promovió su estado a "ADOPT" en 2012. [100]

En el "Informe del ecosistema JVM 2018" (que se afirmó que era "la encuesta más grande jamás realizada a desarrolladores de Java"), que fue preparado en colaboración por Snyk y Java Magazine, Clojure se clasificó como el segundo lenguaje de programación más utilizado en la JVM para "aplicaciones principales". [101] Clojure es utilizado en la industria por empresas [102] como Apple , [103] [104] Atlassian , [105] Funding Circle , [106] Netflix , [107] Nubank , [108] Puppet , [109] y Walmart [110] así como agencias gubernamentales como la NASA . [111] También se ha utilizado para la informática creativa, incluyendo el arte visual, la música, los juegos y la poesía. [112]

En la edición de 2023 de la encuesta para desarrolladores de Stack Overflow , Clojure fue el cuarto lenguaje más admirado en la categoría de lenguajes de programación y scripting, con un 68,51% de los encuestados que trabajaron con él el año pasado diciendo que les gustaría seguir usándolo. Sin embargo, en la categoría de deseados , solo fue marcado como tal por el 2,2% de los encuestados, mientras que JavaScript, con la puntuación más alta, fue deseado por el 40,15% de los desarrolladores que participaron en la encuesta. [113] Posiblemente podría atribuirse a las oportunidades profesionales limitadas para los desarrolladores de Clojure, con poco más de 50 resultados de búsqueda para "desarrollador de Clojure" en la sección estadounidense de Indeed , a mayo de 2024. [114]

Historial de versiones

Véase también

Referencias

  1. ^ ab "Agentes y acciones asincrónicas". Clojure.org . Consultado el 7 de julio de 2019 .
  2. ^ "Programación concurrente". Clojure.org . Consultado el 7 de julio de 2019 .
  3. ^ Hickey, Rich; colaboradores. "core.async". GitHub . Consultado el 7 de julio de 2019 .
  4. ^ "Programación funcional". Clojure.org . Consultado el 7 de julio de 2019 .
  5. ^ Nolen, David; Hickey, Rich. "core.logic". GitHub . Consultado el 7 de julio de 2019 .
  6. ^ ab "Macros". Clojure.org . Consultado el 7 de julio de 2019 .
  7. ^ Esterhazy, Paulus. "Guía de macros de subprocesamiento". Clojure.org . Consultado el 7 de julio de 2019 .
  8. ^ ab Miller, Alex (8 de marzo de 2024). "Lanzamiento de Clojure 1.11.2". Clojure.org .
  9. ^ Fogus, Michael (2011). "Preguntas y respuestas de Rich Hickey". CodeQuarterly.com . Archivado desde el original el 11 de enero de 2017.
  10. ^ Hickey, Rich (2011). "Lo simple hecho fácil". YouTube .[ Se necesita una mejor fuente ]
  11. ^ Bonnaire-Sergeant, Ambrose (2012). Un sistema de tipos opcional práctico para Clojure (tesis). Universidad de Australia Occidental.
  12. ^ "Programación en Clojure" (PDF) . OReilly.com . Consultado el 30 de abril de 2013 .
  13. ^ Hickey, Rich. "Estantería de Clojure". Amazon.com . Archivado desde el original el 2017-10-03 . Consultado el 2019-07-07 .
  14. ^ Rose, Calvin; colaboradores. "Janet Language". Janet-Lang.org . Consultado el 18 de febrero de 2023 .
  15. ^ Baldridge, Timothy. "Pixie". PixieLang.org . Consultado el 7 de julio de 2019 .
  16. ^ Ramachandra, Ramkumar. "Rin". GitHub . Consultado el 7 de julio de 2019 .
  17. ^ abcde Edwards, Kathryn (10 de agosto de 2009). "Lenguajes de programación de la A a la Z: Clojure". Computerworld.com.au . Archivado desde el original el 26 de agosto de 2019.
  18. ^ ab Hickey, Rich (5 de enero de 2009). "Significado y pronunciación de Clojure". Google.com .
  19. ^ ab Krill, Paul (22 de marzo de 2012). "El inventor de Clojure, Hickey, ahora apunta a Android". InfoWorld.com .
  20. ^ ab "Clojure". Clojure.org . Consultado el 7 de julio de 2019 .
  21. ^ abc "El lector". Clojure.org . Consultado el 7 de julio de 2019 .
  22. ^ ab "Diferencias con otros Lisp". Clojure.org . Consultado el 7 de julio de 2019 .
  23. ^ abc «Valores y cambio: el enfoque de Clojure sobre identidad y estado». Clojure.org . Consultado el 7 de julio de 2019 .
  24. ^ ab Hickey, Rich. "Fundamento". Clojure.org . Consultado el 7 de julio de 2019 .
  25. ^ ab Torre, Charles (6 de octubre de 2009). "De experto a experto: Rich Hickey y Brian Beckman: dentro de Clojure". MSDN.com .
  26. ^ "clojure/spec.alpha". GitHub . 26 de abril de 2017.
  27. ^ Hickey, Rich (16 de octubre de 2002). "[ANN] dotLisp: un dialecto Lisp para .Net". Google.com .
  28. ^ Hickey, Rich (15 de abril de 2013). "jfli". SourceForge.net .
  29. ^ Hickey, Rich (3 de abril de 2013). "foil: Interfaz de objetos extraños para Lisp". SourceForge.net .
  30. ^ Hickey, Rich (7 de marzo de 2013). "Lisplets". SourceForge.net .
  31. ^ ab Hickey, Rich (12 de junio de 2020). "Una historia de Clojure". Actas de la ACM sobre lenguajes de programación . 4 (HOPL): 1–46. doi : 10.1145/3386321 . S2CID  219603760.
  32. ^ Elmendorf, Dirk (1 de abril de 2010). "Economy Size Geek: entrevista con Rich Hickey, creador de Clojure". LinuxJournal.com .
  33. ^ "Lo simple hecho fácil". InfoQ . Consultado el 2 de mayo de 2024 .
  34. ^ "(iterar pensamientos): ventajas de la programación orientada a datos". yogthos.net . Consultado el 2 de mayo de 2024 .
  35. ^ "talk-transcripts/Hickey_Rich/EffectivePrograms.md at master · matthiasn/talk-transcripts". GitHub . Consultado el 2 de mayo de 2024 .
  36. ^ ab "Hospedado en la JVM". Clojure.org . Consultado el 7 de julio de 2019 .
  37. ^ "Interoperabilidad Java". Clojure.org . Consultado el 7 de julio de 2019 .
  38. ^ ab Miller, Alex. "Guía de dependencias y CLI". Clojure.org . Consultado el 8 de julio de 2019 .
  39. ^ Hickey, Rich. "edn". GitHub . Consultado el 7 de julio de 2019 .
  40. ^ "Multimétodos y jerarquías". Clojure.org . Consultado el 7 de julio de 2019 .
  41. ^ "Protocolos". Clojure.org . Consultado el 7 de julio de 2019 .
  42. ^ "Tipos de datos: deftype, defrecord y reify". Clojure.org . Consultado el 7 de julio de 2019 .
  43. ^ Goetz, Brian (20 de noviembre de 2014). "Administración: aspectos que dan que pensar". YouTube.com .
  44. ^ Rose, John (12 de julio de 2007). "Llamadas finales en la máquina virtual". Oracle.com .
  45. ^ Rose, John (11 de febrero de 2009). "Algunos lenguajes necesitan poder realizar llamadas finales". Java.net .
  46. ^ "Formularios especiales". Clojure.org . Consultado el 7 de julio de 2019 .
  47. ^ "Referencias y transacciones". Clojure.org . Consultado el 7 de julio de 2019 .
  48. ^ Hickey, Rich (28 de junio de 2013). "Canales core.async de Clojure". Clojure.org .
  49. ^ ab Miller, Alex (30 de junio de 2015). "Clojure 1.7 ya está disponible". Clojure.org .
  50. ^ Hickey, Rich (17 de septiembre de 2014). "Transductores". YouTube.com .
  51. ^ Hickey, Rich (6 de agosto de 2014). "Los transductores están llegando". Cognitect.com .
  52. ^ Hickey, Rich (20 de noviembre de 2014). "Transductores internos". YouTube.com .
  53. ^ "Especificación oficial de EDN". edn-format.org . 2022-04-27.
  54. ^ "ClojureScript". ClojureScript.org . Consultado el 6 de julio de 2019 .
  55. ^ "ClojureScript – Preguntas frecuentes (para desarrolladores de JavaScript)". ClojureScript.org . Consultado el 4 de febrero de 2018 .
  56. ^ "ClojureCLR". GitHub . Consultado el 28 de junio de 2012 .
  57. ^ Borkent, Michiel. "Babashka". Babashka.org . Consultado el 19 de agosto de 2019 .
  58. ^ Hu, Wei. "Un Lisp sobre Perl". MetaCPAN.org . Consultado el 6 de julio de 2019 .
  59. ^ "¿Qué es ClojureDart?", GitHub , Tensegritics, 2022-12-16 , consultado el 2022-12-16
  60. ^ Facorro, Juan. "Clojerl". GitHub . Consultado el 6 de julio de 2019 .
  61. ^ "basilisp". GitHub . Consultado el 13 de mayo de 2024 .
  62. ^ "ClojureRS". GitHub . Consultado el 17 de marzo de 2022 .
  63. ^ Akkaya, Nurullah. "Hurón". Ferret-Lang.org . Consultado el 6 de julio de 2019 .
  64. ^ Wilkerson, Jeaye. "jank". Jank-Lang.org . Consultado el 17 de agosto de 2022 .
  65. ^ Bataev, Roman. "Joker". Joker-Lang.org . Consultado el 6 de julio de 2019 .
  66. ^ Cañón, Aemon. "Laz3r". GitHub . Consultado el 6 de julio de 2019 .
  67. ^ Baldridge, Timothy. "Pixie". PixieLang.org . Consultado el 6 de julio de 2019 .
  68. ^ Connor, Ashe. "Rouge". GitHub . Consultado el 6 de julio de 2019 .
  69. ^ Miller, Alex (4 de febrero de 2019). "Resultados del informe "State of Clojure 2019"". Clojure.org .
  70. ^ Batsov, Bozhidar; colaboradores. "CIDER: El entorno de desarrollo interactivo de Clojure que es genial". CIDER.mx . Consultado el 5 de julio de 2019 .
  71. ^ Fleming, Colin. "Cursive: proporciona compatibilidad total con los lenguajes Clojure y ClojureScript". JetBrains.com . Consultado el 5 de julio de 2019 .
  72. ^ Prokopov, Nikita. "Clojure Sublimed". PackageControl.io . Consultado el 18 de febrero de 2023 .
  73. ^ Helenio, Eero. "Tutkaín". FlowThing.me . Consultado el 18 de febrero de 2023 .
  74. ^ Pope, Tim. "fireplace.vim: Compatibilidad con REPL de Clojure". VIM.org . Consultado el 5 de julio de 2019 .
  75. ^ Monroe, Dominic (13 de diciembre de 2016). "Clojure y Vim: una descripción general: es muy posible". JUXT.pro .
  76. ^ Masashi, Iizuka (29 de abril de 2024). «vim-elin: Un entorno de desarrollo de Clojure para Vim/Neovim, escrito principalmente en Babashka». GitHub . Archivado desde el original el 2 de mayo de 2024 . Consultado el 2 de mayo de 2024 .
  77. ^ Caldwell, Oliver. "Herramientas de Clojure(Script) de Neovim sobre prepl". GitHub . Consultado el 9 de noviembre de 2019 .
  78. ^ Caldwell, Oliver (6 de noviembre de 2019). "Cómo empezar a usar Clojure, Neovim y Conjure en minutos". oli.me.uk .
  79. ^ Strömberg, Peter. "Calva: Programación interactiva en Clojure y ClojureScript". VisualStudio.com . Consultado el 5 de julio de 2019 .
  80. ^ Szabo, Mauricio. "Trébol". VisualStudio.com . Consultado el 28 de enero de 2021 .
  81. ^ clj-kondo / clj-kondo, clj-kondo, 30 de abril de 2024 , consultado el 2 de mayo de 2024
  82. ^ "Descripción general: Clojure LSP". clojure-lsp.io . Consultado el 2 de mayo de 2024 .
  83. ^ Miller, Alex (8 de diciembre de 2017). "Clojure 1.9". Cognitect.com .
  84. ^ "Clojure". Atlassian.net . Consultado el 7 de julio de 2019 .
  85. ^ "Foro de Clojure". clojure.org . Consultado el 20 de marzo de 2020 .
  86. ^ Hickey, Rich (26 de noviembre de 2018). "El código abierto no tiene que ver contigo". GitHub .
  87. ^ "Flujo de trabajo". Clojure.org . Consultado el 7 de julio de 2019 .
  88. ^ Goetz, Brian (24 de mayo de 2020). "El lenguaje JVM no Java favorito de Brian Goetz (parte 1 de 3)". Twitch.tv .
  89. ^ Goetz, Brian (24 de mayo de 2020). "El lenguaje JVM no Java favorito de Brian Goetz (parte 2 de 3)". Twitch.tv .
  90. ^ Goetz, Brian (24 de mayo de 2020). "El lenguaje JVM no Java favorito de Brian Goetz (parte 3 de 3)". Twitch.tv .
  91. ^ Evans, Eric (14 de agosto de 2018). "Modelado del tiempo: Eric Evans: Domain-Driven Design Europe 2018". YouTube.com .
  92. ^ Evans, Eric (21 de noviembre de 2014). "Eric Evans en Twitter". Twitter.com .
  93. ^ "Reunión de James Gosling con la comunidad Java de Londres". YouTube.com . 11 de octubre de 2016.
  94. ^ Graham, Paul (6 de mayo de 2016). "Paul Graham en Twitter". Twitter.com .
  95. ^ Martin, Robert (22 de agosto de 2019). "¿Por qué Clojure?". CleanCoder.com .
  96. ^ Martin, Robert (29 de noviembre de 2018). "El tío Bob Martin en Twitter". Twitter.com .
  97. ^ Martin, Robert (1 de agosto de 2018). "Introducción a la programación funcional". CleanCoders.com .
  98. ^ Martin, Robert (11 de julio de 2017). "Programación funcional pragmática". CleanCoder.com .
  99. ^ "Radar tecnológico | Una guía con opiniones sobre el panorama tecnológico actual". Thoughtworks . Consultado el 20 de mayo de 2024 .
  100. ^ "Radar tecnológico: Clojure". ThoughtWorks.com . Consultado el 10 de febrero de 2019 .
  101. ^ Maple, Simon; Binstock, Andrew (17 de octubre de 2018). "Informe del ecosistema de JVM 2018". Snyk.io .
  102. ^ "Historias de éxito". Clojure.org . Consultado el 27 de octubre de 2018 .
  103. ^ Liutikov, Roman (17 de diciembre de 2017). «Roman Liutikov en Twitter». Twitter.com .
  104. ^ "Puestos de trabajo en Apple". Apple.com . Consultado el 6 de julio de 2019 .
  105. ^ Borges, Leonardo (7 de julio de 2015). "Colaboración en tiempo real con Clojure". YouTube.com .
  106. ^ Pither, Jon (4 de octubre de 2016). "Clojure en Londres: Funding Circle – Prestando algo de Clojure". JUXT.pro .
  107. ^ Williams, Alex (3 de agosto de 2014). "Los nuevos creadores de stacks: Adrian Cockcroft habla de Sun, Netflix, Clojure, Go, Docker y más". TheNewStack.io .
  108. ^ "Nubank adquiere la empresa norte-americana de tecnología Cognitect". 23 de julio de 2020.
  109. ^ Price, Chris (11 de abril de 2014). "Una nueva era de servicios de aplicaciones en Puppet Labs". Puppet.com . Consultado el 6 de agosto de 2020 .
  110. ^ Phillips, Marc (14 de julio de 2015). "Walmart ejecuta Clojure a gran escala". Cognitect.com .
  111. ^ "Repositorio de metadatos comunes". GitHub . Consultado el 6 de julio de 2019 .
  112. ^ Meier, Carin (6 de mayo de 2015). "Computación creativa con Clojure". OReilly.com .
  113. ^ "Encuesta para desarrolladores de Stack Overflow 2023". Stack Overflow . Consultado el 2 de mayo de 2024 .
  114. ^ "Resultados de búsqueda de "desarrollador de Clojure" en Indeed.com [Archivado debido a la mutabilidad de la fuente]". Archive.is . 2024-05-02 . Consultado el 2024-05-02 .
  115. ^ Hickey, Rich (4 de mayo de 2009). "Clojure 1.0". BlogSpot.com .
  116. ^ Hickey, Rich (31 de diciembre de 2009). "Lanzamiento de Clojure 1.1". BlogSpot.com .
  117. ^ Hickey, Rich (19 de agosto de 2010). "Lanzamiento de Clojure 1.2". Google.com .
  118. ^ Redinger, Christopher (23 de septiembre de 2011). "[ANN] Lanzamiento de Clojure 1.3". Google.com .
  119. ^ Dipert, Alan (17 de abril de 2012). "[ANN] Clojure 1.4 lanzado". Google.com .
  120. ^ Halloway, Stuart (1 de marzo de 2013). "ANN: Clojure 1.5". Google.com .
  121. ^ Halloway, Stuart (10 de marzo de 2013). "Clojure 1.5.1". Google.com .
  122. ^ Miller, Alex (25 de marzo de 2014). "[ANN] Clojure 1.6". Google.com .
  123. ^ Miller, Alex (19 de enero de 2016). "Clojure 1.8 ya está disponible". Clojure.org .
  124. ^ Miller, Alex (8 de diciembre de 2017). "Clojure 1.9 ya está disponible". Clojure.org .
  125. ^ Miller, Alex (17 de diciembre de 2018). "Lanzamiento de Clojure 1.10". Clojure.org .
  126. ^ Miller, Alex (6 de junio de 2019). "Lanzamiento de Clojure 1.10.1". Clojure.org .
  127. ^ Miller, Alex (26 de enero de 2021). "Lanzamiento de Clojure 1.10.2". Clojure.org .
  128. ^ Miller, Alex (4 de marzo de 2021). "Lanzamiento de Clojure 1.10.3". Clojure.org .
  129. ^ Miller, Alex (22 de marzo de 2022). "Lanzamiento de Clojure 1.11.0". Clojure.org .
  130. ^ Miller, Alex (5 de abril de 2022). "Lanzamiento de Clojure 1.11.1". Clojure.org .

Lectura adicional

Enlaces externos