Clojure 语言在 2020 年的现状
十年前,Chas Emerick 进行了首次 Clojure 语言使用状况调查。在 2010 年,大多数用户仅使用 Clojure 数周或数月,很少有人将其用作正式的工作项目的编程语言。今年,我们看到用户对工作用途的持续不断增长、对 Clojure 核心价值主张的持续关注以及不断发展的用户社区。
工作用途的 Clojure
自 2010 年以来,我们一直提问的问题之一是,受访者是否正在使用 Clojure 进行工作项目、业余爱好项目,修补或研究。今年,我们看到了 Clojure 在工作中使用率最高的百分比:
此外,我们看到公司规模在向大型公司的一个发生了一个小的转变:1000+ 以上规模的公司增长了 3%(而 1-10 规模的公司减少了)。
我们还首次询问受访者的组织中有多少人在使用 Clojure。不出所料,许多Clojure 团队规模很小。作为高杠杆工具,Clojure 非常适合小型高生产率团队。但是也很高兴看到有很多来自 40 位甚至 100 位以上 Clojure 开发人员公司的受访者。
自 2010 年以来,我们一直在问一个问题(使用的文案和选择有所不同)是 Clojure 使用领域。多年来,最高的类别并没有太大变化,但是我们确实看到了今年“企业应用程序”的显著增长,达到了有史以来的最高水平。
反馈意见表明 Clojure 是一个为公司和团队带来高杠杆作用的工具:
“ Clojure 仍然是我们生产系统的力量倍增器和至关重要的推动器。”
“ Clojure 让我们的小型团队能够事半功倍。”
“到目前为止,Clojure 是我在工作中必须使用的最好的语言,使用它来解决问题是一种荣幸。它几乎是完美的。”
“ Clojure 正在为我们的数据驱动型保险 ERP 提供支持。我想不出还有更好的方法。非常感谢!”
“很难找到太多关于 Clojure 的抱怨:这是一个很棒的语言,拥有一个强大的社区。我计划在这个语言及社区中待很长时间。我们基本上将公司的技术策略押在了它上面。”
“我喜欢使用 Clojure 和 ClojureScript,并将所有使用各种不同语言(PHP,Python,C#,Javascript)的开发项目移至仅使用 Clojure 和 ClojureScript”
“我们的创业公司仅基于 Clojure 和 Clojurescript 构建,对此我们感到非常满意。”
Clojure 的使用在数百家公司中持续增长,越来越多的开发人员将其用于核心业务。
价值
自 2015 年以来,我们一直提出过一个问题,询问 Clojure 用户最看重它哪些方面。自 2015 年以来,这些答案的加权排名几乎保持不变。对于 Clojure 用户而言,最重要的事情依次是:函数式编程、REPL、不可变数据,易于开发和主机互操作。的确,这些都是 Clojure 体验所固有的,并且与 Clojure 存在的原因高度吻合。
大量用户赞扬 Clojure 的发展历程和不断成长的传统,而这一趋势历久不衰:
“ Clojure 是一个非常赞的 Lisp,为品味和优雅而设计。很高兴在其所提供的抽象中进行思考和实现。”
“出色的工作,项目团队!这是我多年来从事软件开发工作中使用的最稳定的技术。”
“我喜欢你们在语言和社区方面所做的工作。在不断变化的世界中,不断地更新只是为了创造不停歇的 Clojure,它就像一个安全的港湾,让我保持理智。”
“我真的很喜欢 Clojure 的简洁和函数式本质。我还喜欢这样一个事实,即团队没有像其他任何语言一样热衷堆砌功能。”
“感谢坚持原则:精益,保守,必不可少,没有多余的装饰,将 Lisp 带回主流的生产级软件。”
社区
今年,我们再次调查了 Clojure 人士最喜欢访问的论坛。一些新的和/或正在增加的条目包括线下 Clojure 会议(今年我们看到了很多新的会议!),新的Ask Clojure 网站,电报群和 Discord。
我们还收集用户如何参与 Clojure 生态系统方面信息。今年的反馈与去年非常相似,但是我们也看到了一些小的提升,包括帮助新的 Clojure 用户、在其组织中倡导 Clojure 以及维护开源代码库方面做出了很大的贡献!
在反馈意见中,许多人喜欢友善且反应迅速的 Clojure 社区:
“ Clojure 社区绝对很赞。在这里提问经常可以快速获得深思熟虑的答案,这一点非常宝贵的。感谢你建立这样一个令人难以置信的社区。”
“ Clojure(脚本)是一种很棒的,经过深思熟虑的语言,对我的工作有很大帮助。而且,它也使我接触到了一个由思想丰富的开发人员组成的社区,这些社区为我提供了精彩的新见解,同时保持了友好而热情的态度。社区”
“出色的语言和独特而富有洞察力的社区。它帮助我重新发现了对编程的热爱。”
深度探讨
Clojure 开发人员在调查中,对版本和工具相关的问题特别感兴趣。
我们今年提出的一个新问题是有关开发人员主要操作系统的信息,以便对我们工具相关工作更好指导。不出所料,MacOS 是领先者(55%),其次是Linux(35%)和 Windows(9%):
对于主要开发工具,今年仅进行了较小的更新。Emacs 略微下降至 43%,IntelliJ / Cursive 略微上升至 32%,而带有 Calva 的 VS Code 增长最大,至 10%。
Clojure 用户拥有丰富的开发环境,每种环境都适合不同的社区和口味,我们很高兴看到它们都日趋完善。
多年来,本调查一直有包含“构建工具”的问题,但是这种单一的整体工具的想法已越来越无法反映人们如何管理 Clojure 项目,他们可以在过程的不同部分使用多种工具,特别是在 Clojure / ClojureScript 混合项目中。为此,我们将这个问题更紧密地针对依赖管理进行了调整,并在今年进行了多选:
回顾前几年,我们继续看到对 Leiningen 的重度使用(但略有减少),而对 clj / deps.edn 的使用则稳定增加。至于 ClojureScript 方面,在 Cloclorists Together 的大力支持下,shadow-cljs 在过去的几年中取得了长足的进步。
在 Java 和 JVM 的更广阔世界中,Java 已迁移到一种新的发行策略,该发行策略于每年春季和秋季发布,并且每 3 年发布一次“长期支持”(LTS)版本:8、11 和(预估) 17。由于 Java 9 对模块系统进行了重大更改,这在 JVM 社区中导致大量用户仍然依赖 Java8。Clojure 也反映了这一点(尽管与其他语言社区相比,向 Java 11 的迁移的可能更多) :
当下一个版本发布时,Java 9、10、12 和将要发布的 13 之类的版本实际上已经不在了,我们建议主要使用 LTS 发行版,否则最好使用最新版。
Java 11 一个未被重视的方面是 Java 在 Docker 等容器中更好地工作做了改进。如果要使用 Java 8 在容器化环境中进行部署,则应该仔细查看 Java 11 中 的更改并考虑进行升级。
Clojure 本身已经使用 Java 8 作为基准 JVM 已有两年了,并将继续这样做(同时也支持 Java 的较新版本)。对于 Clojure 运行环境,我们建议使用 Java 8 或 11。
自去年以来,我们看到 Clojure 1.10.0 和 1.10.1 被大量采用。后者是今年的维护版本,在 Clojure 1.10.0 的基础上改进了错误处理,并优化了 Java 8u201 之后其服务版本中的某些 Java 性能下降的问题。Clojure 1.8 和更早版本的使用在继续减少:
除了先前的依赖性管理问题之外,我们还添加了一个新问题,即受访者如何在生产中启动其应用程序。根据反馈,明年的文案和答案选择可能需要进行一些微调,这次结果中一些有趣的反馈:
大多数用户正在使用诸如 Leiningen 或 clj 之类的启动器来启动其生产应用程序,而不是通过构建 jar 或 uberjars 并直接使用 Java 启动它们。我们确实看到了一个小组也在尝试 Graal 本机映像(尤其是在较小的脚本应用程序中很常见)。
完整结果
如果你想了解全部结果,可以在此处找到过去和过去几年的完整数据集:
2020年 https://www.surveymonkey.com/results/SM-CDBF7CYT7/
2019-2010 年 (请参阅原文)
原文链接:
https://clojure.org/news/2020/02/20/state-of-clojure-2020
参考阅读:
本文作者 Alex Miller,由高可用架构翻译。技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。
高可用架构
改变互联网的构建方式
长按二维码 关注「高可用架构」公众号