1

为什么 Jepsen 使用 Clojure 编写?

 9 months ago
source link: https://www.techug.com/post/why-is-jepsen-written-in-clojure/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为什么 Jepsen 使用 Clojure 编写?

人们一直在问为什么 Jepsen 是用 Clojure 写的,所以我认为值得给出一个可参考的答案。我用二十种语言编写过程序。为什么选择奇怪 Lisp 类编程语言?

Jepsen 是为测试并发系统(主要是数据库)而构建的。因为要测试并发系统,所以语言本身需要良好的并发支持。Clojure 不可变、持久的数据结构让编写正确的并发程序变得更容易,而且语言和运行时都有出色的并发支持:真线程、promises、 futures、 atoms、锁、队列、cyclic barriers、所有 java.util.concurrent 等。我也曾考虑过对副作用有更严格控制的语言(如 Haskell),但最终还是觉得 Clojure 不那么教条的方法更可取。

由于 Jepsen 要测试数据库,因此需要广泛的客户端支持。几乎每个数据库都有一个 JVM 客户端,通常是用 Java 编写的,而 Clojure 具有良好的 Java 互操作性。

由于测试是一项实验性工作,我需要一种简洁、适应性强、适合原型开发的语言。Clojure 是一种简洁的语言,它的语法灵活性,尤其是它的宏系统,很好地实现了这一点。尤其是线程宏让链式转换变得可读,宏还能实现可重用的错误处理并轻松控制资源范围。Clojure REPL 在探索测试运行产生的数据时非常方便。

测试涉及表示、转换和检查复杂的嵌套数据结构。Clojure 的数据结构和标准库函数可能是我见过的最好的。我还将大量结构打印到控制台和文件中:Clojure 的数据语法(EDN)在这方面非常出色。

由于测试需要处理大量的数据,我需要一种性能 “足够好 “的语言。Clojure 当然不是最快的语言,但常用的 Clojure 性能通常在 Java 的一两个数量级之内,而且我可以在关键的地方缩小差距。JVM 拥有出色的剖析工具,这些工具在 Clojure 中也能很好地发挥作用。

Jepsen(天哪)已经有十年历史了:我想要一种内核成熟、强调稳定性的语言。无论从 JVM 目标还是语言本身来看,Clojure 都非常稳定。库不会像 Scala 或 Ruby 那样迅速 “腐烂”。

Clojure 确实有很大的缺点。它的工程社区规模小,没有(广为接受的、成功的)静态类型系统。这两点都会制约一个庞大的团队,但 Jepsen 的维护和使用人员每次只有 1-3 人。如果不使用 Java,使用 JVM primitive 可能会令人沮丧;我偶尔也会这样做。多态性系统的某些方面存在不足,但可以通过库来解决。错误信息非常糟糕。我对此毫无歉意。 😉

在选择 Clojure 之前,我用几种不同的语言对 Jepsen 进行了原型开发。十年过去了,我觉得这是个不错的选择。

本文文字及图片出自 Why is Jepsen Written in Clojure?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK