news 2026/3/31 17:06:25

【Rust日报】Ratatui 支持 no_std 环境、引入 Flex 布局系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Rust日报】Ratatui 支持 no_std 环境、引入 Flex 布局系统

Ratatui 发布 v0.30:支持 no_std 环境、引入 Flex 布局系统

Ratatui v0.30是该库演进中的重要里程碑,其核心突破是实现了对no_std环境的基础支持。通过将核心逻辑与 Rust 标准库解耦,Ratatui 现在可以在嵌入式系统、固件及受限的 WASM 环境中运行,极大地扩展了终端 UI 在非桌面场景下的应用边界。

在功能层面,该版本引入了革命性的 Flex 布局系统。借鉴 CSS Flexbox 逻辑,开发者利用Layout::flex即可轻松实现组件的比例分配、对齐及间距控制,显著降低了构建复杂响应式界面的难度。

在开发者体验(DX)方面,v0.30 进行了重大 API 简化Frame结构体移除了对Backend的泛型依赖。这使得函数签名更加简洁,消除了大量样板代码。此外,新增的Constraint::Fill约束让布局能更智能地填充剩余空间。

其他更新还包括:增强的滚动条(Scrollbar)交互、更精细的文本折行控制以及对Color类型的优化。

v0.30 通过no_std带来的极致便携性与 Flex 布局带来的开发效率提升,标志着 Ratatui 正式从一个基础绘图工具进化为功能完备、全平台适配的现代化 UI 框架**。

阅读:https://ratatui.rs/highlights/v030/

PicoRDM:Redis 终端管理器

PicoRDM是一款基于Rust编写的轻量级Redis 终端 UI (TUI) 管理工具,旨在作为重量级 GUI 客户端(如 RedisInsight)的极简替代方案。

极简高效:利用 Ratatui 框架构建,二进制文件仅约 2MB,启动极速且内存占用极低。功能完备:支持多连接管理(含 TLS)、Key 实时搜索与批量处理、服务器状态监控(内存/连接数等)以及集成的原生 CLI 交互模式。交互友好:提供丰富的快捷键支持并兼容鼠标操作,支持通过剪贴板快速导入连接字符串。跨平台:原生支持 Windows、macOS 和 Linux。

仓库:https://github.com/osdodo/picordm

lisp-in-types:用 Rust Trait System 实现的 Lisp 求值器

作者完全利用 Rust 的类型系统(通过 Trait 编程)实现了一个 Lisp 解释器。这意味着所有的计算都在编译期完成,而不是在程序运行时。

初衷:作者提到是因为“太无聊了”,所以决定挑战 Rust 类型系统的极限。尽管是在类型系统中实现的,该项目的功能却出奇地完整:

  • 基础语法:支持defun(定义函数)、let(局部变量)、begin(顺序执行)和apply

  • 高级特性:甚至支持限定延续(Delimited Continuations),通过call/ec实现。

  • 数值计算:目前默认支持 0 到 8124 的数字。

技术细节与局限:

  • 编译器负担:由于复杂的类型递归计算,运行该项目通常需要增加rustc的堆栈大小。

  • 可扩展性:作者在build.rs中生成了数字定义,用户可以修改它来支持更大的数字范围,但代价是编译时间和内存消耗会激增。

  • 计算模型:这证明了 Rust 的 Trait 系统是图灵完备的,可以用来编写复杂的逻辑,尽管这并不是它的设计初衷。

仓库:https://github.com/playX18/lisp-in-types/

讨论:基于完成的异步 IO 模式

如何在 Rust 中以优雅且高性能的方式建模“基于完成”(Completion-based)的异步 I/O 模式(如io_uring),以及 Rust 现有的异步生态对此支持的局限性。

  1. 核心背景:极致性能的追求 楼主(servermeta_net)正在开发一个基于io_uring的高性能 Web 服务器,目标是利用 Linux 内核 6.12+ 的最新特性实现零拷贝、零分配。

  • 惊人的数据:楼主声称其原型在 4 核环境下达到了 7000 万+ RPS(32 字节请求)和 20Gbps 的带宽(尽管社区对其准确性有争议,但这反映了io_uring的巨大潜力)。

  • 技术栈:使用了io_uring(多扇区接收、批处理)、kTLS(内核态加密)、零拷贝缓冲区管理。

  1. 面临的技术痛点 尽管性能极高,但楼主遇到了“Rust 风格”建模的难题:

  • 状态机 vs Future:目前使用自定义状态机来管理请求,虽高效但难以编写和维护。楼主想知道如何将其转换为标准的async/await语法。

  • 缓冲区所有权:在“基于完成”的模型中,内核在 I/O 完成前拥有缓冲区的所有权。这与 Rust 传统的AsyncRead/AsyncWrite(基于“就绪”/Readiness 模式,用户拥有缓冲区)冲突,导致楼主不得不大量使用unsafe代码。

  • 生命周期与取消:当一个异步操作被取消时,必须确保内核不再访问该内存,否则会发生内存损坏,这在 Rust 的poll模型下极难安全实现。

  1. 对现有框架的评述 讨论中深度剖析了现有 Rust 异步库在处理io_uring时的短板:

  • Tokio:被认为“根基上就是错的”。因为 Tokio 是为epoll(基于就绪通知)设计的,将io_uring强行塞入 Tokio 会导致跨线程传递 Ring 等不符合底层设计的做法,且无法发挥io_uring的批处理优势。

  • Monoio / Compio / Glommio:这些库虽然比 Tokio 更贴近io_uring,但仍被认为存在局限。例如 Monoio 依赖的底层库版本较旧,Compio 为了跨平台(Windows/Linux)在性能和特性上做了妥协。

  • 推荐关注axboe-uring(更接近原作者 liburing 的实现)、ringolo、以及without.boats关于io_uring的深度解析博客。

  1. 社区核心观点与建议

  • 所有权是关键:在io_uring中,Future 必须在操作期间“租借”或“锁定”缓冲区所有权。现有的AsyncRead接口已不适用,社区正在探索新的Completion驱动接口。

  • 批处理的力量:楼主强调,io_uring的真正性能提升来自于“批处理提交/完成”以及减少内存屏障(Memory Fences),而目前的通用异步运行时往往在每个操作上都消耗了过多开销。

  • 不成熟的现状:大家公认 Rust 目前的异步标准(基于poll的 readiness 模型)与现代硬件/内核趋势(completion 模型)存在根本性不兼容,这可能需要 Rust 在编译器或标准库层面引入新的异步原语才能完美解决。

总结结论:这是一个关于“底层性能极限”与“高级语言抽象”之间冲突的讨论。它揭示了即便是在 Rust 中,想要在不牺牲安全性的前提下发挥io_uring的全部威力,仍然是一个尚未被完全攻克的难题。

Reddit:https://www.reddit.com/r/rust/comments/1ptw1sk/modeling_modern_completion_based_io_in_rust/

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/29 14:36:07

Spring Authorization Server完整指南:从零搭建企业级授权中心

在当今微服务架构盛行的时代,如何安全高效地管理用户认证与授权成为了每个开发者必须面对的问题。Spring Authorization Server作为一个功能强大的OAuth2授权服务器实现,为开发者提供了一套完整的身份认证解决方案。本文将带你从项目介绍到实际部署&…

作者头像 李华
网站建设 2026/3/25 21:09:18

Miniconda配置过程中遇到的常见问题及修复方法

Miniconda配置过程中遇到的常见问题及修复方法 在现代数据科学和AI开发中,Python早已成为首选语言。但随着项目增多,你是否也经历过这样的尴尬时刻:刚为一个项目装好PyTorch 2.0,另一个依赖旧版本的项目就跑不起来了?或…

作者头像 李华
网站建设 2026/3/17 18:26:19

打造你的专属音乐空间:HyPlayer播放器深度体验

打造你的专属音乐空间:HyPlayer播放器深度体验 【免费下载链接】HyPlayer 仅供学习交流使用 | 第三方网易云音乐播放器 | A Netease Cloud Music Player 项目地址: https://gitcode.com/gh_mirrors/hy/HyPlayer 在数字音乐时代,我们渴望一个既能满…

作者头像 李华
网站建设 2026/3/20 9:56:00

JavaScript 框架时代即将结束——编译器时代已经开始

我有一支技术全面、经验丰富的小型团队,专注高效交付中等规模外包项目,有需要外包项目的可以联系我我知道哪里不对劲,是在那天——我把一半 JavaScript 删掉之后,应用在生产环境里反而跑得更顺。没有重构。 没有重写。 更没有“架…

作者头像 李华
网站建设 2026/3/30 16:52:04

告别 interface{} 模拟,Go 终于要有真正的 Union 类型了?

大家好,我是Tony Bai。“Go 什么时候支持枚举?” “Go 什么时候有真正的联合类型?”这可能是 Go 语言诞生以来,被问得最多的问题之一。现有的解决方案——无论是用 const 模拟枚举,还是用 interface{} 配合类型断言模拟…

作者头像 李华
网站建设 2026/3/25 8:36:27

掌握采购管理与库存管理的关键要点:象过河软件助力企业成功

对企业而言,采购管理的核心是 “按需备货、成本可控”,库存管理的关键是 “数据精准、周转高效”,一旦两者脱节,就会陷入 “库存积压占用资金、缺货断供错失订单、流程混乱引发损耗” 的困境。想要掌握两者的管理关键,…

作者头像 李华