


























Racket(一个以语言设计、宏系统和 DSL 开发著称的 Scheme 方言,早年叫 DrScheme)刚发布 v9.2,官方还提供了 `rackup upgrade` 和 `raco pkg migrate 9.1` 这类升级命令。讨论之所以热烈,是因为 Racket 长期和程序设计语言(PL)研究、教学教材和“语言导向编程”绑在一起。很多人是在 How to Design Programs(HtDP,《程序设计方法》)和 SICP(《计算机程序的构造和解释》)的脉络里认识它的,也有人把它当作探索 gradual types、nanopass、embeddable DSL 的实验平台。与此同时,评论不断把它和 Python、Clojure、Common Lisp、Julia 等语言对比,争论焦点是语法啰嗦、生态规模和低层控制力之间怎么取舍。
这条帖子主要是在宣布 Racket v9.2 正式发布,并给出下载地址和 release announcement 链接。维护者还明确提醒,如果在用 rackup,可以直接 `rackup upgrade`。同时还要执行 `raco pkg migrate 9.1` 来迁移已安装包,说明升级流程对包生态有一定要求。评论区基本把它当作一次稳定的常规版本更新来看。
不少人把 Racket 描述成会改变思维方式的语言,学会之后会用它去“透视”其他语言的结构。有人说自己长期写 Elixir,但 Racket 更像母语,因为它更容易把大脑里的问题直接映射成代码。还有人回忆早年的 DrScheme / Scheme 体验,认为它教会了闭包、尾递归和函数式思维。也有人特别喜欢函数总是返回值这一点,拿它和 Python 里会返回 `none` 的可变操作作对比。
Racket 还被许多人和大学教学联系在一起,尤其是采用 How to Design Programs(HtDP,《程序设计方法》)教材的课程。评论者说这本书最有价值的不是新内容,而是它把递归、树形结构和数据定义驱动的设计过程讲得很清楚。有人提到它帮助自己学会先考虑数据类型,再写出对应函数签名,这种方法后来也影响了 code review 和带初学者。SICP 虽然同样经典,但有人觉得 HtDP 更像一条统一、可迁移的学习路线。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]
另一类评论非常看重 Racket 的可重定义性,认为它适合在还没想清楚问题时先搭原型。有人用它探索深度学习模型的新几何结构,甚至觉得瓶颈是理解而不是算力,所以训练慢也无所谓。Racket 的 little learner 被当作很适合入门和试错的脚手架。也有人质疑这种“超能力”叙事,认为很多做法只是把成熟的 Python / PyTorch 思路重新包装,随后又有人用替换 IEEE 754 为 balanced ternary 的例子回击。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10]
不少人喜欢 Racket 的功能,但也承认它比 Clojure 啰嗦,读起来会慢慢像 COBOL。Common Lisp 仍被视为更有“原始威力”的选择,尤其在低层代码和工具链灵活性上更强。另一方面,Python 之所以仍是默认选项,主要还是生态优势压倒一切。评论里还提到 `for/fold` 很强,以及可以用把 Python 库接进 Racket 的包来缓解生态差距;做 PL 的人则常提到 gradual types、nanopass 和 embeddable DSL 这些创新,说明 Racket 在语言研究圈里仍很有存在感。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]
Racket: 一种以语言设计、宏系统和 DSL 支持著称的 Lisp/Scheme 方言。
Scheme: Lisp 家族的简洁方言,常用于函数式编程教学。
HtDP(How to Design Programs): 面向入门的程序设计教材,强调数据定义、递归和设计流程。
SICP: 经典 CS 教材《Structure and Interpretation of Computer Programs》,常用 Scheme 讲解抽象与计算模型。
gradual types: 允许动态类型和静态类型并存、逐步过渡的类型系统。
nanopass: 把编译器实现拆成许多小 pass 的方法/框架,便于语言变换。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。