Rhombus 1.0 发布说明

Rhombus 1.0 Release Notes

Rhombus 1.0 现已发布,它提供了一种通用目的的函数式编程语言,将传统的、易于理解的语法与 Racket 生态系统的深度可扩展性相结合。它的设计旨在弥合 Lisp 风格宏的强大功能与现代、非 S-expression 语言的可读性之间的鸿沟。

Core Design Goals and Philosophy

Rhombus 旨在提供编程概念的现代综合体——例如词法作用域变量、闭包、对象、模式匹配和类型参数化——同时保持高度的可扩展性。其主要目标是允许开发者根据特定领域定制语言支持,而不会遇到与 Lisp 繁重的括号表示法相关的陡峭学习曲线。

Rhombus 构建于 Racket 之上,可以通过以 #lang rhombus 开头的文件作为 Racket 模块使用。这种关系类似于 Kotlin 与 Java 或 Elixir 与 Erlang 的关系;Rhombus 利用了 Racket 的工具,包括 raco 命令行套件和 DrRacket IDE,但相对于标准 Racket 引入了显著的改进,包括:

  • Conventional Syntax: 易于阅读的基于缩进的语法,在日常使用中更加亲切。
  • Improved Data Structures: 更好的预定义数据结构,特别是列表。
  • Enhanced Language Features: 全新的类系统、普遍的模式匹配和分层命名空间组织。
  • Advanced Type System: 可扩展的静态信息,存在于契约(contracts)与类型(types)之间的光谱上。

Metaprogramming and the Bicameral Syntax

Rhombus 在保留 Racket 宏系统强大功能的同时,移除了对 S-expressions 的要求。它通过一种“双面”(bicameral)语法来实现这一点,其中传统的表面语法与“灌木丛表示法”(shrubbery notation)配对,后者作为元编程的 S-expressions 模拟物。

这种架构允许 Rhombus 实现“开放编译器 API”,将宏视为编译时元编程。这种方法通过将 DSLs 直接集成到通用语言中,避免了孤立的领域特定语言(DSLs)的陷阱。

The Ellipsis () Operator

Rhombus 最具特色的功能之一是省略号运算符 ()。与其它语言中常见的标准“splat”运算符不同,Rhombus 中的省略号是一个宏,允许进行紧凑的重复操作。它可以处理嵌套的数据结构,并在某些语境下有效地替代 map 操作。

"The magic is that Rhombus lets you define different macros depending on whether or not the macro identifier appears in binding context (left side of =), expression context, or some other contexts."

Performance and Implementation

Rhombus 列表使用 RRB 树(Relaxed Radix Balanced trees)实现。这种数据结构提供了结构共享和函数式更新,在迭代、插入、删除、追加和任意读取操作中具有 $O(\log n)$ 的复杂度。RRB 树对缓存非常友好,通常使用 $\log_{16}$ 或 $\log_{32}$ 作为基数,从而最大限度地减少了开销的常数因子。

Practical Applications and Ecosystem

虽然 Rhombus 是一种较新的语言,且目前还没有主流语言那样的库容量,但它旨在用于生产环境,并得到 Racket 社区的支持。目前的实际应用包括:

  • Pille: 一个构建在 Rhombus 之上的语言,使用 LLVM 作为后端,展示了强大的元编程能力。
  • Economancy: 一个桌面游戏实现,展示了日常函数式编程的应用。
  • rhombus-html-lib: 一个通过 AI 实现的 HTML 5 解析器,遵循 HTML 5 规范。
  • pict: 一个动画图片库,用于网络和安全课程的幻灯片以及复杂的评估动画。
  • Shplait: 一个结合了 ML 的类型系统与 Rhombus 语法的教学工具。

AI and the Future of Language Design

Rhombus 开发者认为,自主编码代理(autonomous coding agents)的兴起并不会削弱对新语言或 DSLs 的需求。因为 Rhombus 具有良好的文档记录,AI 代理已经表现出在编写地道的 Rhombus 代码方面的熟练度。开发者建议,通过更好的 DSL 支持来提高话语水平,有助于人类程序员和 AI 代理,促进它们之间的更好沟通与协作。

Sources