Rio 0.5 版本大升级:终端引擎拆分,rio-vt 和 librio 性能大揭秘!
【Rio 项目介绍】
喜欢 Rio 吗?可以赞助该项目让它持续发展。Rio 有相关文档,包括安装、配置、特性、快捷键绑定等内容,还有更新日志、博客、贡献指南。语言选择丰富,有英语、韩语、葡萄牙语、西班牙语、波兰语、日语、简体中文、繁体中文等。还有近期文章,涵盖 2026 年和 2025 年的相关内容。
【rio-vt 和 librio 登场】
一直以来,Rio 终端的核心与渲染器、配置以及周边应用紧密交织,复用完善部分困难。不过从 Rio 0.5 版本开始,引擎拆分成了清晰、可嵌入的层次,即 rio-vt 和 librio。
【两层架构解析】
大多数需要终端功能的项目需要的是引擎,现在这个引擎以两层架构形式提供。rio-vt 是安全的 Rust 库,包含 VT 状态机等诸多功能,不涉及渲染等,可看作 alacritty_terminal 的现代替代方案;librio 是以 libghostty 为理念,基于 C ABI 封装的相同核心,以预构建的静态库形式提供,无需 Rust 工具链。默认情况下,两者都很轻量级,构建 rio-vt 不启用特性时仅为终端核心。
【rio-vt 的实际应用】
这个核心工作方式与真实终端类似,向它输入字节流可获取网格状态。以下是完整操作流程示例,不涉及 PTY、渲染器和线程。由于 rio-vt 本身不进行绘制操作,可自行决定如何处理网格数据。
【免费的选中文本和搜索功能】
有相关代码示例展示了如何实现选中文本和搜索功能。
【图像支持】
Sixel、Kitty 和 iTerm2 的图像传输功能由核心解码并通过事件暴露,前端可像处理其他事件一样记录图像,还有在无界面环境下捕获 Kitty 图形协议传输的示例。
【librio:跨语言使用相同的核心】
librio 将引擎封装在小型的 C ABI 中,可创建引擎、表面,写入数据并获取渲染状态。这是原生 Swift 或 C 前端逐单元格处理的界面,脏行渲染状态使 CPU 渲染可行,且它是跨平台的,能在 macOS、Linux 和 Windows 上构建和运行。
【已投入生产使用】
像 Lovable 这样的公司已在生产环境中使用 rio-vt,为实际终端工作负载提供支持。将核心提取到独立库中,不仅是为了代码清理,更是为了让其他产品基于同一引擎开发。
【性能表现】
基准测试有局限性,预计 libghostty 在某些方面可能优于 rio-vt,但还未测试。维护了独立基准测试项目 rio-vt-benchmark,将 rio-vt 与 vt100 和 alacritty_terminal 在相同工作负载下对比,以下是在 Apple Silicon Mac 上使用 Criterion 测试得到的中位数数据。
【将字节流解析到屏幕上】
在混合、纯 ASCII、快速滚动、交替屏幕重绘等工作负载下,rio-vt 表现较好;在 SGR 频繁变化时,vt100 胜出;在宽 Unicode 字符方面,alacritty 表现更好。
【将填充后的屏幕数据序列化输出】
在格式化内容和纯文本内容操作上,rio-vt 速度远快于 vt100。
【将屏幕从 80x24 调整到 100x40 再调回】
在调整大小操作上,rio-vt 速度最快。在大多数情况下,rio-vt 解析速度更快,序列化屏幕数据和调整屏幕大小速度也有优势,但在某些测试中并非领先。
【未来展望】
rio-vt 已发布在 crates.io 上,版本号与 Rio 保持一致,任何 Rust 项目可依赖它。librio 无需安装,GitHub 版本附带相关文件,在 macOS 上使用 Swift 或 C 开发无需 Rust 工具链,在 Linux 和 Windows 上可从源代码构建。还支持 WebAssembly。如果你想在相关项目中嵌入真正的终端,这是不错的选择,若基于它开发了东西,可分享。
