Roc – 一门快速、友好、函数式的语言
Roc 是一门新的、快速、纯函数式编程语言,深受 Elm 和 ML 系语言启发,旨在把强静态类型与受管理的效果,和接近 Go 的编译速度与性能结合起来。评论者称赞它异常精致的网站、内嵌 REPL 以及清晰的设计目标(速度、友好、简洁),同时强调诸如编译期引用计数(Perceus)、名为“abilities”的效果系统,以及基于平台的 FFI 模型等技术思路。由于 Elm 相关的治理与社区历史,以及在年轻语言和小生态下采用它的不确定性,部分人仍持谨慎态度;但也有人认为 Roc 有望让纯函数式编程变得更实用、更主流。
总体反响与网站
- 许多回应者认为 Roc 很有意思且很现代,函数式语言爱好者尤其表现出强烈热情。
- 新网站广受好评:清晰、简洁,带有内嵌 REPL、简短的引导式教程,以及对“fast”“friendly”和“functional”的深入解释页面。
- 不少人希望更多语言也能达到这样的上手体验质量。
语言目标与设计
- 强调的核心卖点包括:
- 纯函数式,并采用严格求值。
- 通过激进优化和“机会性”的原地变异,专注于生成非常快的编译代码。
- 静态引用计数(Perceus 风格),在保持语义简单的同时避免 GC。
- 管理式效果(“Tasks” / abilities),将副作用隔离并提升可测试性。
- 平台抽象和声明式导入被认为很有意思,但目前还没有被完全理解。
- Roc 有时可以在存在某些类型错误的情况下运行代码,只要那些路径没有被执行;这被视为对重构有用。
类型系统、宏与易用性
- 类型完全由推导得到;注解是可选的,但也支持。有人认为这会削弱错误定位,宁愿至少在函数边界上做注解。
- Roc 追求简单,而不是像高阶类型那样极具表达力的特性。
- 计划是不支持宏,主要是为了让编辑器工具更简单;一些人认为这会严重限制元编程。
- 对语法的反应褒贬不一:有人不喜欢 lambda 和插值使用反斜杠、空白敏感以及 camelCase。
工具、FFI 与实现
- 编译器使用 Rust 编写;标准库使用 Zig。
- 已有基于 LSP 的语言服务器;一个专门 IDE 的优先级已降低,转而支持多编辑器。
- 存在 C FFI,但它是通过“platforms”而不是任意按包绑定的方式来路由。
与其他语言的比较
- 经常被拿来与 Elm、Haskell、OCaml/ML、Koka、Rust、Go、F#、Gleam 以及各种 Lisp 相比较。
- 一些人认为 Roc 是一种实用的、严格的、更简单的 Haskell 式语言,受 Elm 和 Koka 影响。
- 怀疑者质疑它相较于现有生态是否提供了足够多的新东西,尤其考虑到其尚年轻的库生态。
社区与历史方面的担忧
- 一些评论重新提到了围绕 Elm 的过去治理与社区问题,对相关圈子中的另一门年轻语言持怀疑态度,也不太愿意投入。
- 也有人强调道歉、二次机会,并指出 Roc 当前的社区给人的感觉很友好。
- 还有人认为这种反复出现的争议本身就不理想,更愿意把注意力放在技术层面。