返回

文章详情

我在使用 Clojure 约一个月后的想法

Hacker News2026年6月2日 19:56

我现在正在用 Clojure 生成这个网站(是的,就在用 GNU Make 和 shell 改写之后;我有问题,好吧?)。在个人的传统中,我把编写静态网站生成器作为玩耍和学习 Clojure 这个新语言的项目。虽然我早就嘲笑 Clojure 的大量语法(三种括号!?),但事实证明它相当符合人体工学,也很强大。以下是我在 Clojure 上玩了一个月后的印象。 我喜欢的东西 比 Common Lisp 更具一致性 Common Lisp 之所以被称为 Common,是因为它是在 80 年代早期编写时,所有现存 Lisp 的折衷。因此,它是编程范式和命名方案的奇怪拼凑。例如,不是对列表进行 map 操作,而是用 mapcar。不是 filter,而是写 remove-if-not,带来了双重否定的混淆。总体而言,Common Lisp 有一种明显的由委员会设计的感觉,这显然是因为它确实是这样。由于 Clojure 更新且是一个人的创意,它作为一种语言更具一致性。例如,seq 抽象意味着我通常不需要担心自己在处理哪种序列。与其记住数组用 aref,列表用 nth,我只需对所有内容都使用 nth。这也使得映射变得更容易:与其记住 ;; 这是个真实的语法!(loop for k being the hash-keys using (hash-value v) of hash-table ...) ;; 好吧,你也可以用 (maphash (lambda (k v) ...) hash-table) 我可以简单地调用 (map (fn [[k v] ...]) hash-table) 就完成了。而且请记住,map 可以与任何集合一起使用。在相等性方面也是如此:与其记住 eq、eql、equal、equalp 等在类型特定方面的细微区别,我可以直接调用 =(如果比较数字值则用 ==,如果查看值是否相同则用 identical?)。公平地说,有一些警告,但我在一个月内并没有遇到它们。我不得不立即学习不同的相等形式才能开始使用 Lisp。 比 Scheme 有更多的“电池随附” Scheme 也是由委员会构建的,但你可以争辩它比 Clojure 更具一致性。然而,它在某种程度上“有一致性”,就像自行车一样:在符合人体工学方面几乎包含很少东西,将语言精简到其最基本的骨架。确实,每次的 Scheme 报告修订的引言都开始于:程序设计语言应该不是通过在特性上堆积特性来设计,而是通过消除使附加特性看起来必要的弱点和限制。Scheme 用户常常自豪地宣称 R5RS 规范可以在 50 页内完成,这很令人印象深刻,但像错误处理、文件处理,甚至哈希映射这样的基本功能却缺失于核心语言。虽然 R6RS 增加了很多功能,但也导致了社区的巨大分裂,而 R7RS 正在尝试修复这个问题,但进展缓慢。Scheme 就像是一颗美丽的宝石,是纯编程理想的实现。而 Clojure 则更为务实:它拥有一个庞大的标准库,并托管在 JVM 上,因此可能在您所工作的任何领域都有库可用。特别作为一个爱好者程序员,我很欣赏这个生态系统。 符合人体工学的数据结构 吸引我最早接触 Lisp 的原因之一是它是一个“万物皆为”的语言。你知道的,就像 Lua:万物皆为表;Tcl:万物皆为字符串;Lisp:万物皆为列表。我喜欢有一个“大理念”的语言,而且这个理念被贯彻进行了。然而,在“现实生活”中,并不是所有事物都是一个列表。例如,还有向量(随机存取列表)或字典(关联列表)。非 Clojure 的 Lisp 也有这些,但 Clojure 使它们成为一等公民且符合人体工学。这就是我花了最长时间来喜欢 Clojure 的原因,因为我真的很喜欢 Lisp 的“万物皆为列表”的特性。但 Clojure 的四种基本数据类型——列表(耶!)、向量、哈希映射和集合——构造合理,并且在核心语言中被平等对待,这对于它们的符合人体工学至关重要。 我遇到的困难 当然,没有一种编程语言是完美的,我发现 Clojure 到目前为止有一些痛点。 语法太多 我向你保证我没有开玩笑。有关 Lisp 的一件我非常喜欢的事情就是它的语法一致性:它只有括号和空格。据我所知,唯一一个语法更少的语言是 Forth。尽管它是 Lisp(不要质疑我),但 Clojure 的语法比例如 Scheme 多得多。还有 ()、[]、{} 和 #{} 用于序列;.和/在符号名称中有特殊含义;老实说,一段时间以来,让我失望的是反引用语法 ~。我真的很喜欢 ` 和 , 之间的对称性!然而,我承认我在这段时间内已经习惯了这种语法,甚至现在也有所欣赏(见上文)。不过,我确实希望有一种更简单的方法来移动到 ]}]})))} -ness 的块结束。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡