A history of Clojure

A history of Clojure
复制标题

Clojure 的历史

DOI:
--
复制
发表时间:
2020
期刊:
Proc. ACM Program. Lang.
影响因子:
--
通讯作者:
R. Hickey
R. Hickey
中科院分区:
--
文献类型:
--
作者:
R. Hickey

文献摘要

被引文献

相似文献

Clojure被设计成一种通用的、实用的函数式语言,适合专业人士使用,无论其宿主语言是什么,例如,Java应该是Clojure最初设计于2005年,发布于2007年,是Lisp的一种方言,但不是任何早期Lisp的直接后代。它通过并发安全的状态管理结构,支持编写正确的多线程程序,而不需要复杂的互斥锁,从而为使用不可变数据的纯函数进行编程提供了补充。Clojure是有意托管的,因为它编译并运行在另一种语言的运行时上,比如JVM。这不仅仅是一种实现策略;许多功能确保用Clojure编写的程序可以直接有效地利用宿主语言的库并与之进行互操作。尽管结合了两个(当时)相当不受欢迎的想法,函数式编程和Lisp,Clojure已经被金融,气候科学,零售,数据库,分析,出版,医疗保健,广告和基因组学等各行各业以及全球咨询公司和初创公司采用,这对作者的职业生涯改变感到惊讶。Clojure中的大多数想法并不新颖,但它们的结合使Clojure在语言设计(函数式,托管,Lisp)中处于独特的位置。本文讲述了Clojure最初开发背后的动机,以及各种设计决策和语言结构的基本原理。然后,它涵盖了其发布和采用后的演变。
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. 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. 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. 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.