{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,21]],"date-time":"2026-05-21T17:29:10Z","timestamp":1779384550359,"version":"3.53.1"},"reference-count":41,"publisher":"Association for Computing Machinery (ACM)","issue":"HOPL","license":[{"start":{"date-parts":[[2020,6,12]],"date-time":"2020-06-12T00:00:00Z","timestamp":1591920000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2020,6,14]]},"abstract":"<jats:p>Clojure was designed to be a general-purpose, practical functional language, suitable for use by professionals wherever its host language, e.g., Java, would be. Initially designed in 2005 and released in 2007, Clojure is a dialect of Lisp, but is not a direct descendant of any prior Lisp. It complements programming with pure functions of immutable data with concurrency-safe state management constructs that support writing correct multithreaded programs without the complexity of mutex locks.<\/jats:p>\n          <jats:p>Clojure is intentionally hosted, in that it compiles to and runs on the runtime of another language, such as the JVM. This is more than an implementation strategy; numerous features ensure that programs written in Clojure can leverage and interoperate with the libraries of the host language directly and efficiently.<\/jats:p>\n          <jats:p>In spite of combining two (at the time) rather unpopular ideas, functional programming and Lisp, Clojure has since seen adoption in industries as diverse as finance, climate science, retail, databases, analytics, publishing, healthcare, advertising and genomics, and by consultancies and startups worldwide, much to the career-altering surprise of its author.<\/jats:p>\n          <jats:p>Most of the ideas in Clojure were not novel, but their combination puts Clojure in a unique spot in language design (functional, hosted, Lisp). This paper recounts the motivation behind the initial development of Clojure and the rationale for various design decisions and language constructs. It then covers its evolution subsequent to release and adoption.<\/jats:p>","DOI":"10.1145\/3386321","type":"journal-article","created":{"date-parts":[[2020,6,12]],"date-time":"2020-06-12T16:22:59Z","timestamp":1591978979000},"page":"1-46","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":25,"title":["A history of Clojure"],"prefix":"10.1145","volume":"4","author":[{"given":"Rich","family":"Hickey","sequence":"first","affiliation":[{"name":"Cognitect, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2020,6,12]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"Anglican web site. https:\/\/probprog.github.io\/anglican\/ (also at Internet Archive","year":"2020","unstructured":"Anglican. 2020. Anglican web site. https:\/\/probprog.github.io\/anglican\/ (also at Internet Archive 5 March 2020 15:36:41 ). Anglican. 2020. Anglican web site. https:\/\/probprog.github.io\/anglican\/ (also at Internet Archive 5 March 2020 15:36:41 )."},{"key":"e_1_2_1_2_1","unstructured":"Phil Bagwell. 2001. Ideal Hash Trees. http:\/\/infoscience.epfl.ch\/record\/64398 Technical report October 2001.  Phil Bagwell. 2001. Ideal Hash Trees. http:\/\/infoscience.epfl.ch\/record\/64398 Technical report October 2001."},{"key":"e_1_2_1_3_1","unstructured":"Philip Bagwell and Tiark Rompf. 2011. RRB-Trees: Efficient Immutable Vectors. 16. http:\/\/infoscience.epfl.ch\/record\/169879  Philip Bagwell and Tiark Rompf. 2011. RRB-Trees: Efficient Immutable Vectors. 16. http:\/\/infoscience.epfl.ch\/record\/169879"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/165593.165596"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/319996.319998"},{"key":"e_1_2_1_6_1","doi-asserted-by":"crossref","unstructured":"Richard Bird et al. 1988. Lectures on constructive functional programming. Oxford University Computing Laboratory Programming Research Group.  Richard Bird et al. 1988. Lectures on constructive functional programming. Oxford University Computing Laboratory Programming Research Group.","DOI":"10.1007\/978-3-642-74884-4_5"},{"key":"e_1_2_1_7_1","volume-title":"https:\/\/srfi.schemers.org\/srfi- 171\/srfi- 171.html (also at Internet Archive","author":"Bj\u00f6rnstam Linus","year":"2020","unstructured":"Linus Bj\u00f6rnstam . 2019. SRFI-171 Transducers. https:\/\/srfi.schemers.org\/srfi- 171\/srfi- 171.html (also at Internet Archive 9 March 2020 17:40:11 ). Linus Bj\u00f6rnstam. 2019. SRFI-171 Transducers. https:\/\/srfi.schemers.org\/srfi- 171\/srfi- 171.html (also at Internet Archive 9 March 2020 17:40:11 )."},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-49498-1_4"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/583810.583821"},{"key":"e_1_2_1_10_1","unstructured":"ClojureIRC. 2008. Clojure IRC log. http:\/\/clojure- log.n01se.net\/date\/2008- 02- 01.html (also at Internet Archive 10 March 2020 16:39:37 ).  ClojureIRC. 2008. Clojure IRC log. http:\/\/clojure- log.n01se.net\/date\/2008- 02- 01.html (also at Internet Archive 10 March 2020 16:39:37 )."},{"key":"e_1_2_1_11_1","unstructured":"ClojureTV. 2019. ClojureTV na. https:\/\/www.youtube.com\/user\/ClojureTV ClojureTV is a YouTube video channel the description for which is: \u201cClojureTV brings together talks and presentations from the community major Clojure conferences and Cognitect. Here you can find Clojure\/conj Clojure\/west and EuroClojure talks as well as custom video tutorials and presentations from Rich Hickey and the Cognitect team.\u201d.  ClojureTV. 2019. ClojureTV na. https:\/\/www.youtube.com\/user\/ClojureTV ClojureTV is a YouTube video channel the description for which is: \u201cClojureTV brings together talks and presentations from the community major Clojure conferences and Cognitect. Here you can find Clojure\/conj Clojure\/west and EuroClojure talks as well as custom video tutorials and presentations from Rich Hickey and the Cognitect team.\u201d."},{"key":"e_1_2_1_12_1","volume-title":"Funding Circle \u2013 Lending some Clojure. https:\/\/juxt.pro\/blog\/posts\/clojure- infundingcircle.html (also at Internet Archive","author":"Crim Robert","year":"2020","unstructured":"Robert Crim and Jon Pither . 2016. Funding Circle \u2013 Lending some Clojure. https:\/\/juxt.pro\/blog\/posts\/clojure- infundingcircle.html (also at Internet Archive 5 March 2020 15:51:29 ). Robert Crim and Jon Pither. 2016. Funding Circle \u2013 Lending some Clojure. https:\/\/juxt.pro\/blog\/posts\/clojure- infundingcircle.html (also at Internet Archive 5 March 2020 15:51:29 )."},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1016\/0022-0000(89)90034-2"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0054092"},{"key":"e_1_2_1_15_1","unstructured":"Richard P Gabriel Sonya E Keene Gregor Kiczales David A Moon Jim Kempf Larry Masinter Mark Stefik Daniel L Weinreb and Jon L White. 1987. Common lisp object system specification.\". ANSI X3J13 Document 87\u2013002.  Richard P Gabriel Sonya E Keene Gregor Kiczales David A Moon Jim Kempf Larry Masinter Mark Stefik Daniel L Weinreb and Jon L White. 1987. Common lisp object system specification.\". ANSI X3J13 Document 87\u2013002."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF01806178"},{"key":"e_1_2_1_17_1","volume-title":"http:\/\/www.paulgraham.com\/lisp.html (also at Internet Archive","author":"Graham Paul","year":"2020","unstructured":"Paul Graham . 2003. Lisp Essays . http:\/\/www.paulgraham.com\/lisp.html (also at Internet Archive 1 Feb. 2020 09:49:40 ). Paul Graham. 2003. Lisp Essays. http:\/\/www.paulgraham.com\/lisp.html (also at Internet Archive 1 Feb. 2020 09:49:40 )."},{"key":"e_1_2_1_18_1","volume-title":"Transaction processing: concepts and techniques","author":"Gray Jim","unstructured":"Jim Gray and Andreas Reuter . 1992. Transaction processing: concepts and techniques . Elsevier . Jim Gray and Andreas Reuter. 1992. Transaction processing: concepts and techniques. Elsevier."},{"key":"e_1_2_1_19_1","unstructured":"Stuart Halloway. 2009. Programming Clojure. Pragmatic Bookshelf.  Stuart Halloway. 2009. Programming Clojure. Pragmatic Bookshelf."},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/1065944.1065952"},{"key":"e_1_2_1_21_1","volume-title":"C++ gems","author":"Hickey Rich","unstructured":"Rich Hickey . 1996. Callbacks in C++ using template functors . In C++ gems . SIGS Publications, Inc. , 515\u2013537. Rich Hickey. 1996. Callbacks in C++ using template functors. In C++ gems. SIGS Publications, Inc., 515\u2013537."},{"key":"e_1_2_1_22_1","unstructured":"Rich Hickey. 2003. DotLisp - A Lisp Dialect for .Net. http:\/\/dotlisp.sourceforge.net\/dotlisp.htm (also at Internet Archive 10 Feb. 2020 20:30:16 ).  Rich Hickey. 2003. DotLisp - A Lisp Dialect for .Net. http:\/\/dotlisp.sourceforge.net\/dotlisp.htm (also at Internet Archive 10 Feb. 2020 20:30:16 )."},{"key":"e_1_2_1_23_1","unstructured":"Rich Hickey. 2004. Jfli - A Java Foreign Language Interface for Common Lisp. http:\/\/jfli.sourceforge.net\/ (also at Internet Archive 10 Feb. 2020 20:17:34 ).  Rich Hickey. 2004. Jfli - A Java Foreign Language Interface for Common Lisp. http:\/\/jfli.sourceforge.net\/ (also at Internet Archive 10 Feb. 2020 20:17:34 )."},{"key":"e_1_2_1_24_1","unstructured":"Rich Hickey and Eric Thorsen. 2005. Foil - a Foreign Object Interface for Lisp. http:\/\/foil.sourceforge.net\/ (also at Internet Archive 10 Feb. 2020 20:25:50 ).  Rich Hickey and Eric Thorsen. 2005. Foil - a Foreign Object Interface for Lisp. http:\/\/foil.sourceforge.net\/ (also at Internet Archive 10 Feb. 2020 20:25:50 )."},{"key":"e_1_2_1_25_1","volume-title":"The origin of concurrent programming","author":"Richard Hoare Charles Antony","unstructured":"Charles Antony Richard Hoare . 1978. Communicating sequential processes . In The origin of concurrent programming . Springer , 413\u2013443. Charles Antony Richard Hoare. 1978. Communicating sequential processes. In The origin of concurrent programming. Springer, 413\u2013443."},{"key":"e_1_2_1_26_1","volume-title":"The JavaScript Object Notation ( JSON) Data Interchange Format. https:\/\/tools.ietf.org\/html\/rfc8259 (also at Internet Archive","author":"IETF.","year":"2020","unstructured":"IETF. 2017. The JavaScript Object Notation ( JSON) Data Interchange Format. https:\/\/tools.ietf.org\/html\/rfc8259 (also at Internet Archive 7 March 2020 20:01:42 ). IETF. 2017. The JavaScript Object Notation ( JSON) Data Interchange Format. https:\/\/tools.ietf.org\/html\/rfc8259 (also at Internet Archive 7 March 2020 20:01:42 )."},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/319838.319859"},{"key":"e_1_2_1_28_1","volume-title":"The Java TM Virtual Machine Specification","author":"Lindholm T","unstructured":"T Lindholm and F Yellin . 1999. The Java TM Virtual Machine Specification , 2 nd edn. Sun Microsystems . T Lindholm and F Yellin. 1999. The Java TM Virtual Machine Specification, 2nd edn. Sun Microsystems.","edition":"2"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1109\/MIC.2011.148"},{"key":"e_1_2_1_30_1","volume-title":"The definition of standard ML: revised","author":"Milner Robin","unstructured":"Robin Milner , Mads Tofte , Robert Harper , and David MacQueen . 1997. The definition of standard ML: revised . MIT press . Robin Milner, Mads Tofte, Robert Harper, and David MacQueen. 1997. The definition of standard ML: revised. MIT press."},{"key":"e_1_2_1_31_1","volume-title":"Out of the tar pit. Software Practice Advancement (SPA)","author":"Moseley Ben","year":"2006","unstructured":"Ben Moseley and Peter Marks . 2006. Out of the tar pit. Software Practice Advancement (SPA) 2006 . Ben Moseley and Peter Marks. 2006. Out of the tar pit. Software Practice Advancement (SPA) 2006."},{"key":"e_1_2_1_32_1","volume-title":"Purely functional data structures","author":"Okasaki Chris","unstructured":"Chris Okasaki . 1999. Purely functional data structures . Cambridge University Press . Chris Okasaki. 1999. Purely functional data structures. Cambridge University Press."},{"key":"e_1_2_1_33_1","volume-title":"Developer survey results","author":"Overflow Stack","year":"2019","unstructured":"Stack Overflow . 2019. Developer survey results 2019 . https:\/\/insights.stackoverflow.com\/survey\/2019 (also at Internet Archive 5 March 2020 15:55:07 ). Stack Overflow. 2019. Developer survey results 2019. https:\/\/insights.stackoverflow.com\/survey\/2019 (also at Internet Archive 5 March 2020 15:55:07 )."},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/947955.1083808"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1023\/A:1010085415024"},{"key":"e_1_2_1_36_1","doi-asserted-by":"crossref","unstructured":"Guy L Steele and Richard P Gabriel. 1996. The evolution of Lisp. In History of programming languages\u2014II. ACM 233\u2013330.  Guy L Steele and Richard P Gabriel. 1996. The evolution of Lisp. In History of programming languages\u2014II. ACM 233\u2013330.","DOI":"10.1145\/234286.1057818"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.5555\/1098646"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3064899.3064910"},{"key":"e_1_2_1_40_1","volume-title":"https:\/\/www.w3.org\/TR\/rdf- syntax- grammar\/ (also at Internet Archive","author":"Syntax C.","year":"2020","unstructured":"W3 C. 2014. RDF 1.1 XML Syntax . https:\/\/www.w3.org\/TR\/rdf- syntax- grammar\/ (also at Internet Archive 5 March 2020 13:23:43 ). W3C. 2014. RDF 1.1 XML Syntax. https:\/\/www.w3.org\/TR\/rdf- syntax- grammar\/ (also at Internet Archive 5 March 2020 13:23:43 )."},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/75277.75283"},{"key":"e_1_2_1_42_1","volume-title":"Build a Bank: Nubank with Edward Wible. https:\/\/softwareengineeringdaily.com\/ 2018\/07\/10\/build- a- bank- nubank- with- edward- wible\/ (also at Internet Archive","author":"Wible Edward","year":"2020","unstructured":"Edward Wible and Jeff Meyerson . 2018. Build a Bank: Nubank with Edward Wible. https:\/\/softwareengineeringdaily.com\/ 2018\/07\/10\/build- a- bank- nubank- with- edward- wible\/ (also at Internet Archive 5 March 2020 15:45:47 ). Edward Wible and Jeff Meyerson. 2018. Build a Bank: Nubank with Edward Wible. https:\/\/softwareengineeringdaily.com\/ 2018\/07\/10\/build- a- bank- nubank- with- edward- wible\/ (also at Internet Archive 5 March 2020 15:45:47 )."}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3386321","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3386321","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T21:32:03Z","timestamp":1750195923000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3386321"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,6,12]]},"references-count":41,"journal-issue":{"issue":"HOPL","published-print":{"date-parts":[[2020,6,14]]}},"alternative-id":["10.1145\/3386321"],"URL":"https:\/\/doi.org\/10.1145\/3386321","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,6,12]]},"assertion":[{"value":"2020-06-12","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}