Raku 2025 评测
I’m happy to translate the article for you, but I’ll need the full text of the post (excluding the source line you already provided). Please paste the content you’d like translated, and I’ll return it in Simplified Chinese while preserving the original formatting, markdown, and any code blocks or URLs.
Technical summary
-
Rakudo commits: ~1 650(MoarVM、NQP、Rakudo、文档)——比 2024 年减少约 20 %。
-
所有仓库现在将
main设为默认分支(而不是master)。 -
RakuAST 工作: 大约 58 % 的 Rakudo 提交用于 RakuAST 项目(相较 2024 年的 33 % 有所提升)。
-
95 % 的工作由 Stefan Seifert(TPRF 资助)完成。
- 结果:用 Raku 编写的 Rakudo 部分现在可以使用 RakuAST(即“bootstrap”)进行构建。
-
-
剩余工作: 仍有少数问题阻碍基于 RakuAST 的 Rakudo 成为下一个语言层级发布的默认版本。
核心开发亮点
| 领域 | 发生了什么? |
|---|---|
| MoarVM Unicode tools | Geoffrey Broadwell 进行了一次重要的内部更新。随后 Shimmerfairy 将 MoarVM Unicode 支持从 15.0 → 17.0 升级,新增了表情符号(例如 FINGERPRINT、 SPLATTER、 HARP)。 |
| Script runners | Patrick Böker 添加了新的运行器,提升了 CLI 脚本执行速度,并支持 Windows 原生脚本运行。 |
| Continuous‑integration | CI 现在产生的误报大幅减少,减轻了开发者的负担。 |
| Reproducible builds | 多亏了 Timo Paulssen 等人,Rakudo 的构建过程再次可复现——对打包者来说是个重大胜利。 |
| REPL improvements | - 持久化语法更改。 - 现在支持多行注释。 - 部分更改已从 REPL 模块回移(见链接的博客文章)。 |
| Experimental‑feature tests | 针对 :pack、:cached、:macros 等的测试已从 roast 套件迁移到 Rakudo 仓库,因为它们不属于语言定义的一部分。 |
| JVM backend | 过去一年几乎没有活动。JVM 后端将不再在发行说明中提及,也不保证能够避免生态系统的破坏。**行动号召:**如果你关心 JVM 后端,请积极参与! |
最显著的新特性(默认语言级别)
1. 可变参数(varargs)C‑函数
Patrick Böker 在 MoarVM 和 Rakudo 中添加了基础设施,以通过 va_arg 约定调用接受可变数量参数的 C 函数。
use NativeCall;
sub foo(str, **@ --> int32) is native is symbol('printf') {*}
foo "The answer: %d\n", 42; # → The answer: 42
printf 是一个经典的可变参数函数示例。
2. 伪终端支持
得益于新的伪终端实现(同样由 Patrick Böker 完成),编写终端应用程序现在更加简便。
Advent 文章解释了 如何 与 为何 实现,并介绍了 Anolis 终端仿真模块。
该特性仍有些粗糙;来年将进行打磨(例如完整的基于终端的调试器)。
3. Hash.new / Map.new 与命名参数
以前,以命名参数调用 Hash.new 或 Map.new 时会悄悄产生空容器,因为意外的命名参数会被忽略。
现在,当命名参数是 唯一 参数时,会被解释为键/值对。
dd Hash.new(a => 42, b => 666);
# {:a(42), :b(666)}
dd Map.new(a => 42, b => 666);
# Map.new((:a(42), :b(666)))
4. exits-ok 测试子例程
Test 模块现在提供 exits-ok 子例程,便于验证代码的退出行为。
use Test;
exits-ok { exit 1 }, 1;
# ok 1 - Was the exit code 1?
exits-ok { exit }, 1;
# not ok 2 - Was the exit code 1?
exits-ok { 42 }, 0;
# not ok 3 - Code did not exit, no exit value to check
注意: 在 Advent 版本的文章之后,名称已从
exit-ok改为exits-ok,以与dies-ok和lives-ok对齐。
对 未来 语言层级 最显著的新增
有序哈希
现在已经提供有序哈希的实现(键保持插入顺序)。
use v6.e.PREVIEW;
my %h is Hash::Ordered = "a".."e" Z=> 1..5;
say %h.keys; # [a b c d e]
say %h.values; # (1 2 3 4 5)
以后可能会加入语法糖;上述语法目前已经可用。
仅限 RakuAST 的更改(通过 RAKUDO_RAKUAST=1 启用)
当环境变量 RAKUDO_RAKUAST=1 被设置时,以下行为将在下一个语言层级发布后 默认 生效。
| 变量 | 用途 |
|---|---|
RAKU_LANGUAGE_VERSION | 指示编译任何 Raku 源代码时使用的默认语言层级。它 不 影响代码中显式的版本声明。 |
示例
$ RAKUDO_RAKUAST=1 RAKU_LANGUAGE_VERSION=6.e.PREVIEW raku -e 'say nano'
1766430145418821670
$ RAKUDO_RAKUAST=1 RAKU_LANGUAGE_VERSION=6.e.PREVIEW raku -e 'use v6.d; say nano'
===SORRY!=== Error while compiling: ... (language version mismatch)
结束语
Raku 生态系统在众多贡献者的辛勤工作下持续发展。
从 RakuAST 引导到 Unicode 17 支持,从可变参数到有序哈希,语言正稳步提升功能和精致度。
如果您对上述任何领域感兴趣——尤其是 JVM 后端或即将推出的终端调试器——请考虑参与贡献!
祝编码愉快,期待在下一篇 Advent 帖子中再见。
编译时变量
$ raku -e 'say $?SOURCE'
say $?SOURCE
-
?$SOURCE– 包含当前编译单元的源代码。
将环境变量 RAKUDO_OMIT_SOURCE 设置为 true 可在字节码中省略它。 -
?$CHECKSUM– 源代码的 SHA‑1 摘要。
$ RAKUDO_RAKUAST=1 raku -e 'say $?SOURCE'
say $?SOURCE
$ RAKUDO_RAKUAST=1 raku -e 'say $?CHECKSUM'
81892BA38B9BD6930380BD81DB948E4D7A9C14E7
$ RAKUDO_RAKUAST=1 RAKUDO_OMIT_SOURCE=1 raku -e 'say $?SOURCE'
Nil
这些新增特性旨在供 MoarVM 运行时调试器使用,也方便需要进行验证的打包者。
本地化
大部分本地化工作已从 Rakudo 核心迁移到独立的 Raku‑L10N 项目中,该项目吸引了多位新贡献者。进展报告可在 habere‑et‑dipertire 的博客文章 “Hallo, Wêreld!” 中找到。
每种本地化都提供一个 “趣味” 命令行脚本(以该语言喜爱的食物命名)以及一个官方脚本。
| 语言 | 趣味脚本 | 官方脚本 | 示例 |
|---|---|---|---|
| Dutch | dutku | kaas | dutku -e 'zeg "foo"' → foo |
| French | freku | brie | freku -e 'dis "foo"' → foo |
其他模块(按字母顺序)
- App::Rak – 21 世纪的
grep/find/ack/ag/rg,功能更强大。 - Cro –
cro命令行和网页工具。 - PDF – 用于读取、操作和写入 PDF 数据的基类。
- Red – 一个 Raku ORM。
- REPL – 更易配置的 REPL。另见 REPL Avalanche。
- Rakuast::Rakudoc::Renderer – 将 RakuDoc v2 渲染为文本、HTML、HTML‑Extra、Markdown。
- Slang::Nogil – 允许无符号标量变量。另见 Allowing for fewer dollars。
- Terminal::LineEditor – 通用终端行编辑器。
- zef – Raku 模块管理工具。
RakuDoc
- RakuDoc v2.0 于2024年12月完成;2025年用于实现它。符合规范的渲染器可通过
Rakuast::RakuDoc::Render分发获取。 - 在此之后,开始开发名为 Elucid8(开发预览版)的文档管理系统。
- 从9月起,Damian Conway 和 Richard Hainsworth 设计了一个 枚举系统(最初设想用于 RakuDoc v3.0),该系统通过在块类型前加
num前缀,使任何块——段落、标题、代码片段、公式等——都可以被枚举。 - RakuDoc 规范现已更新至 v2.20.2。新的枚举规范尚未合并到
main,因为仍在努力让Rakuast::RakuDoc::Render实现它。 - RakuDoc 作为一种严肃的文档标记语言展现出前景,并且是 Markdown 的直接竞争者。
生态系统统计 (2025)
- 508 个 Raku 模块在 2025 年被更新或首次发布(↑ 38 % 相比 2024 年的 367)。
- 仅通过名称即可通过
zef安装的不同模块共有 2 435 个。 - Raku 生态系统归档中可用的不同模块版本有 13 843 个(↑ 12 181 在 2024 年)。
- 这相当于 ≈ 4.5 个模块更新/天 在 2025 年(高于 2024 年的 3.9 /天)。
我注意到的模块(按字母顺序)
| 模块 | 描述 | “另见” |
|---|---|---|
| AI::Gator | AI 通用助手,配备面向工具的 REPL。 | — |
| Air | 以正确的方式构建网站。 | We’re Walking On The Air |
| Anolis | 终端模拟器。 | A Terminal’s Tale |
| ASTQuery | 使用富有表现力的语法查询和操作 Raku 的抽象语法树(RakuAST)。 | From ASTs to RakuAST to ASTQuery |
| Cromponent | 使用 Cro 模板创建网页组件。 | Cromponent new features |
| DataStar | 用于 data‑star 超媒体框架的 Raku SDK。 | Raku To The Stars |
| Draku | Raku 文档浏览器。 | — |
| Elucid8::Build | 将 RakuDoc 源码渲染为多语言网站。 | Create a minimal site with Elucid8 |
| Gnome::Gtk4 | GNOME UI 工具包 v4 的绑定。 | Tools for Gnome::Gtk4 |
| LLM::Graph | 高效调度并组合多个 LLM 生成步骤。 | Robust code generation combining grammars and LLMs |
| Math::NumberTheory | Raku 的数论函数。 | Numerically 2026 Is Unremarkable Yet Happy |
| SBOM::Raku | Raku 专用的 SBOM 功能。 | Towards more accountability of Raku programs |
| Test::Coverage | 检查测试文件的覆盖率是否足够。 | Towards more coverage |
| Text::Emoji | 提供 :text: → emoji 的转换。 | — |
| Zeco | Raku 生态系统托管模块。 | Grant Report: Raku Ecosystem Final |
其他模块(按字母顺序)
- App::Rak – 21 世纪的
grep/find/ack/ag/rg增强版。 - Cro –
cro命令行和网页工具。 - PDF – 用于读取、操作和写入 PDF 数据的基类。
- Red – Raku ORM。
- REPL – 更易配置的 REPL。See also REPL Avalanche.
- Rakuast::Rakudoc::Renderer – 将 RakuDoc v2 渲染为文本、HTML、HTML‑Extra、Markdown。
- Slang::Nogil – 允许无符号标量变量。See also Allowing for fewer dollars.
- Terminal::LineEditor – 通用终端行编辑。
- zef – Raku 模块管理工具。
#raku‑dev 实验机器人
一个新的机器人 rakkable 已经出现在 #raku-dev IRC 频道。
它为 App::Rak 的新 “rakudo‑xxx” 功能提供交互式前端,这些功能本身依赖新的 Ecosystem::Cache 模块。这使得在生态系统中搜索最新版本的模块变得容易。
示例查询
“在 Raku 生态系统中查找
provides部分提到的代码,要求包含字符串Lock.new并且也包含字符串$!lock。”
rakkable: eco-provides Lock.new --and=$!lock
rakkable – 正在运行:
eco-provides Lock.new --and=$!lock,请稍候!
rakkable – 在 25 个文件(24 个发行版)中找到 30 行:
一般公告
- 机器人目前位于 #raku‑dev,但您也可以直接调用它,而无需
rakkable:前缀。 - 发布关于 Raku 编程语言的内容时,请记得使用
#rakulang标签!
Raku.org 网站改版
Raku 网站已全面更新,感谢 Steve Roe。现在它是:
- Dog‑fooded 并使用 htmx 进行超增强。
- 托管在 Åir 上。
- 使用 cro 构建。
- 用 Raku 编写。
- 由 picocss 样式化。
文档改进
Raku 文档项目 已迎来了许多新合作者。亮点:
- 由于 RakuAST RakuDoc 解析器,文档的 CI 测试现在 ~4× 更快。
社交媒体转变
- 我(作者)已经停止使用 X(前身为 Twitter)。这很痛苦,但 Bluesky 和 Mastodon 是很好的替代品,许多重要的社区成员已经迁移过去。
- 如果你还没有切换,考虑一下——为你自己,也为你关注的人。
会议与峰会
- 很遗憾,今年未能组织 Raku Conference(现场或线上)。我们期待明年会有更好的时机。
- 第二届 Raku Core Summit 计划于 2025 年举行。
Rakudo 每周新闻
现在由 Steve Roe(2025 年下半年及以后)制作 Rakudo Weekly News。新功能包括 code gists——向团队致敬!
问题解决仓库活动(2025)
仓库已收到 36 条新问题。欢迎提供反馈,特别是关于以下主题:
- 进一步改进