Rhombus v1.0: 一种带有常规语法的Racket风格语言

Lobsters Hottest 工具

摘要

Rhombus v1.0,一种基于Racket构建的、具有常规语法和强大宏功能的新型可扩展编程语言,已发布。

<p><a href="https://lobste.rs/s/bkwkz5/rhombus_v1_0_racket_flavored_language">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/22 19:37

# Rhombus v1.0 来源:https://blog.racket-lang.org/2026/06/rhombus-v1.0.html Rhombus 1.0 版本现已发布! - 安装:https://rhombus-lang.org/download.html - 更多信息:https://rhombus-lang.org/ - 为何要创建一门新语言?https://rhombus-lang.org/goal.html(以下为复制内容) - 常见问题解答:https://rhombus-lang.org/faq.html(以下为复制内容) - 示例程序:见下文(https://blog.racket-lang.org/2026/06/rhombus-v1.0.html#example-rhombus-programs) Rhombus 主要贡献者:Mashfi Ishtiaque Ahmad, Taylor Allred, Nia Angle, Wing Hei Chan, Stephen De Gabrielle, Robert Bruce Findler, Jacqueline Firth, Matthew Flatt, Oliver Flatt, Kiran Gopinathan, Ben Greenman, Siddhartha Kasivajhula, Alex Knauth, Jay McCarthy, Lucas Myers, Alec Mills, Sam Phillips, Sorawee Porncharoenwase, Jens Axel Søgaard 以及 Sam Tobin-Hochstadt。 ## Rhombus 的目标 现代编程语言反映了对最重要编程概念(包括词法作用域变量、闭包、对象、模式匹配和类型参数化)的共识。那么,为什么还要再创造一门新语言呢? 在基础知识之外,仍然有更多关于编程结构的好想法,无法全部纳入任何单一语言规范中。此外,特定领域受益于为其量身定制的语言支持。语言的可扩展性有助于在管理语言规模与适应广泛任务的适用性这一对相互竞争的目标之间取得平衡。 许多较新的语言都包含宏系统以实现可扩展性,但其他宏系统未能达到 Lisp 传统(包括 Racket)中宏的表达力和流畅性。然而,这种表达力很难与 Lisp 极简的、以括号为导向的记法分离开来。 Rhombus 被设计为: - 对于日常用途(不需要宏)来说,易于上手且使用方便,这在一定程度上意味着采用传统语法; - 与 Racket 一样可扩展,同时使 Racket 最先进的设施更加一致和易于广泛受众使用。 ## 常见问题解答 - **Rhombus 是什么样的编程语言?** Rhombus 是一种通用的、函数式的、可扩展的编程语言,具有优良的性能(https://rhombus-lang.org/performance.html)、详尽的文档(https://docs.racket-lang.org/rhombus/index.html?fam=Rhombus&fam=rhombus)和实用的库(https://pkgs.racket-lang.org/?fam=Rhombus)。它是一种提供交互性和灵活性的动态语言,同时也具备从小型脚本扩展到大型系统所需的静态和抽象强制构造。 - **不是已经有很多类似的语言了吗?** 尽管我们认为 Rhombus 有许多独特的小特性,包括使用省略号(...)进行紧凑重复以及一组具有良好渐近复杂性的默认函数式数据结构,但最大的不同在于可扩展性。请参阅 Rhombus 目标(https://rhombus-lang.org/goal.html)。 - **它快吗?** 这里有一些基准测试(https://rhombus-lang.org/performance.html)。 - **如何入门?** 请参阅入门指南(https://docs.racket-lang.org/rhombus-getting-started/index.html?fam=Rhombus)。 - **我必须使用 DrRacket 吗?** DrRacket 编程环境是最简单的入门方式,但也可以使用 VSCode 的 Magic Racket 或 Emacs 的 Racket 模式(及其 `racket-hash-lang-mode` 主模式)。 - **Rhombus 与 Racket 是什么关系?** Rhombus 构建于 Racket 之上,并依赖许多 Racket 工具,包括 DrRacket 编程环境和 `raco` 命令行套件。大致上,它们的关系类似于 Elixir 与 Erlang,或 Kotlin 与 Java。 不过,公平地说,Rhombus 就是 Racket,因为 Racket 本身就是一个多语言生态系统,只需将 Racket 模块的开头从 `#lang racket` 改为 `#lang rhombus`,它就成为了 Rhombus 模块。而 Rhombus 则旨在推动 Racket 的多语言能力向前发展,并支持更多基于 Racket 和 Rhombus 构建的语言和方言。 - **Rhombus 只是使用不同语法的 Racket,对吗?** 新语法体现了 Rhombus 的主要目标,但 `#lang rhombus` 还在其他方面对 `#lang racket` 进行了改进:更好的预定义数据结构(尤其是列表)、新的类系统、无处不在的模式匹配、作为契约与类型谱系上新延伸点的可扩展静态信息、分层命名空间组织等等。 这些通用语言改进本可以为一种基于 S-表达式的 Racket 方言实现,但语言与语法的协同设计为 Rhombus 打开了更多可能性,并产生了一个整体大于部分之和的结果。 - **Rhombus 是没有 S-表达式的 Racket,因此语法不是同像的,对吗?** 你好,Lisp 爱好者!Rhombus 具有双院制语法(https://parentheticallyspeaking.org/articles/bicameral-not-homoiconic/),其中与 S-表达式层类似的是 shrubbery 记法(https://docs.racket-lang.org/shrubbery/index.html?fam=Rhombus&famroot=rhombus)。这是 Rhombus 宏和元编程方法的重要组成部分。你可能会对这个小的元循环解释器(https://github.com/racket/rhombus/blob/master/rhombus/rhombus/tests/example-interp.rhm)感兴趣。 - **Rhombus 只有在我想要深入研究可扩展语言、领域特定语言(DSL)和/或宏时才有用吗?** 使用 Rhombus 并不一定意味着要编写宏,因为 Rhombus 在基础语言中提供了你所期望的所有功能(很可能还有更多)。一个丰富的基础语言是通过宏可扩展性实现的,这可以被视为实现细节或学术问题。如果你喜欢函数式、动态语言,并对现代综合感兴趣,那么 Rhombus 可能适合你。 - **宏真的好吗?** Rhombus 的设计反映了一种信念:元编程是软件构建的基础,而最有效的元编程方法是与通用语言集成的方法。 特别是,在通用语言内部容纳领域特定语言(DSL)可以避免一些常见的 DSL 陷阱,例如难以集成到应用中的孤立语言,或添加到 DSL 中但其本身又不免需要演化的不成熟的抽象构造。同时,认真对待元编程不仅有益于 DSL,也有益于文档、分析和工具支持等元编程任务。 术语“宏”引发了各种含义和联想。Rhombus 所采用的方法或许更准确地描述为“编译时元编程”或“开放编译器 API”,但其根源在于 Lisp 风格的宏。 - **Rhombus 是一门学术语言吗?研究语言?教学语言?** Rhombus 根植于学术界,但它不是教学语言,也不仅仅是研究语言。它旨在用于生产环境。 Rhombus 目前还不能提供与最广泛使用的语言相媲美的丰富库。但作为 Racket 的衍生,它拥有持续存在和发展所需的资源和社区。用户应该期待与 Racket 几十年来提供的稳定性、一致性和支持相当的水平。 - **在自主编程代理的时代,我们还需要新的编程语言或 DSL 吗?** 谁知道呢? 关于 AI 编程的一个常见早期预测是,它将导致新语言的终结,因为 AI 只能使用训练数据中代表性的最流行语言。这个预测并未成真。截至 2026 年 5 月(甚至在 Rhombus 1.0 之前),编程代理已经相当擅长编写地道的 Rhombus 代码。也许良好的文档有所帮助。 至于 DSL,似乎有可能的是,提高编程的话语水平对人类程序员、自主编程代理以及它们之间的对话都有好处。在这种情况下,我们将需要具有更好 DSL 支持的语言,而这正是 Rhombus 的目标。 ## 示例 Rhombus 程序 Rhombus 的网页 https://rhombus-lang.org/ 包含一个简短示例的轮播。 对于更大规模和现实世界的示例,现在还处于早期阶段,但 Rhombus 的贡献者已经在许多任务中使用了 Rhombus——当然,包括 Rhombus 发行版中的库。 - **Pille**(https://github.com/distractedlambda/pille)是一门基于 Rhombus 构建的新语言。它使用了 Rhombus 的语言构建设施,同时以 LLVM 作为后端。这是一个重度元编程的示例。 - **Economancy**(https://github.com/oflatt/economancy)是一个桌面游戏,包含裁判、玩家程序和最小 GUI 界面的 Rhombus 实现,全部在函数式编程课程中使用 Rhombus 实现。它展示了 Rhombus 在日常函数式编程中的运用。 - **`rhombus-html-lib`**(https://pkgd.racket-lang.org/pkgn/package/rhombus-html-lib)是 Rhombus 附带的一个包。它提供了一个完整的 HTML 5 解析器,是 AI 按照 HTML 5 规范实现的。该实现相比理想的 Rhombus 代码更偏向 Java 风格和命令式,性能也有提升空间,但它展示了 Rhombus 的一次较大规模使用。 - **幻灯片**(https://github.com/mflatt/netsec-slides)用于一门网络与安全课程(https://users.cs.utah.edu/~mflatt/cs6014/),全部使用 Rhombus 及其动画图片库 `pict`(https://docs.racket-lang.org/rhombus-pict/index.html)实现。幻灯片代码并不典型,而且作为一些最古老的 Rhombus 代码,它们也不是最新的风格,但这是一个庞大的代码库。 - **pict-demo**(https://github.com/oflatt/pict-demo)则更侧重于 `pict` 和元编程。该仓库包含一篇即将发表的 ICFP'26 论文(关于 `pict` 库)的草稿。运行示例涉及动画化求值步骤,实现使用了一个 `eval_tree.rhm` 库,该库将程序展开为求值与动画组件的组合。 - **Shplait**(https://github.com/mflatt/shplait)是另一个教学工具:一种结合了 ML 类型系统和 Rhombus 语法的语言。它被用于犹他大学的编程语言课程(https://my.eng.utah.edu/~cs3520/f24/)。 - **`rhombus-draw-lib`**(https://pkgd.racket-lang.org/pkgn/package/rhombus-draw-lib)是 Rhombus 附带的另一个包。它封装并完善了 `racket/draw`(https://docs.racket-lang.org/draw/)库,以实现 Rhombus 的 `draw`(https://docs.racket-lang.org/rhombus-draw/)版本。与其他一些 Rhombus 包一样,它展示了重用 Racket 库的方法。

相似文章

Racket v9.2

Lobsters Hottest

Racket v9.2 发布,改进包括更安全的模式匹配检查、Typed Racket 修复、Unicode 17.0 支持,以及许多其他修复和文档更新。

Racket 的 Shrubbery 语法

Lobsters Hottest

Shrubbery 表示法是一种对行和缩进敏感的文本级表示法,用于 Racket 中的 Rhombus 编程语言,旨在部分地对输入进行分组以供进一步解析。