【Rust日报】2026-09-27 Qt 官方推出面向 Rust 的 UI Bridge
内容提要
Qt发布面向Rust的UI Bridge公开测试版,允许Rust开发者通过QML接入Qt Quick界面,无需编写C++。rust-mqtt 0.6.0为嵌入式MQTT客户端新增MQTTv5增强认证等功能。Moxy是低依赖的过程宏语法工具栈。module-cycles用Dylint检测兄弟模块循环依赖。
延伸解读
Qt Bridge 的定位与取舍
Qt Bridge 面向希望只写 Rust 的开发者,通过 QML 接入 Qt Quick,避免直接处理 C++ 头文件和手工 FFI。与 qmetaobject-rs 和 CXX-Qt 相比,它更强调纯 Rust 体验,但当前构建仍需本机 C++ 工具链和 qmake。QML 对象在 Rust 侧以 Rc<RefCell<T>> 暴露,借用规则运行时检查,这要求开发者注意运行时借用冲突。
rust-mqtt 0.6.0 的增强与限制
rust-mqtt 0.6.0 补齐了 MQTTv5 的增强认证和手动确认,适合资源受限的嵌入式环境。它不提供自动重连、keepalive 循环等意见化连接管理,将控制权交给用户。已知限制包括单包多主题订阅尚未支持,有序主题保证未内建。后续计划加入 MQTT 3.1.1 并改善 std 体验,同时坚持 no_std/no_alloc 主目标。
Moxy 的依赖与性能权衡
Moxy 是一套低依赖的过程宏语法工具栈,非可选外部依赖主要是 unicode-ident,核心语法栈自研。作者目标并非全面超越 syn,而是减少依赖并保持性能对标。它用自维护 EBNF 和 grammar fixtures 持续校验解析覆盖,并支持 stable 与 nightly。项目仍早期,API 会变,适合愿意参与语法覆盖和架构反馈的开发者。
module-cycles 的检测范围与建议
module-cycles 是一个 Dylint lint,用于报告兄弟模块之间的循环依赖,即共享同一父模块的子树互相引用。父子互用不报。依赖来自 rustc 名字解析结果,包括路径、use/re-export、方法调用等,外部 crate 宏展开的引用会跳过。每个环只报一次,并提示最短环上的其余边,建议将共享项移到一侧或共同依赖的模块。
Q&A
Qt 的 Rust UI Bridge 是什么?它主要解决什么问题?
Qt 官方推出的面向 Rust 的 UI Bridge 公开测试版,允许 Rust 开发者通过 QML 接入 Qt Quick 界面,无需编写 C++。它旨在让 Rust 开发者利用 Qt 的成熟度、硬件加速和跨平台支持,同时保持业务代码用 Rust 编写。
Qt Bridge 与 qmetaobject-rs 和 CXX-Qt 有什么区别?
qmetaobject-rs 是 QML + Rust 的现有方案,现偏维护状态;CXX-Qt 更适合已有 C++ 团队。Qt Bridge 侧重“只写 Rust”,不直接碰 C++ 头文件与手工 FFI,UI 用 QML,业务侧通过属性宏与 trait 的精简 API 交互。
rust-mqtt 0.6.0 版本主要新增了哪些功能?
rust-mqtt 0.6.0 补齐了 MQTTv5 能力,重点是完整的增强认证(enhanced authentication),并加入手动/延迟确认(manual acknowledgments)。
Moxy 是什么?它的设计目标有哪些?
Moxy 是一套面向过程宏的 Rust 语法工具栈,覆盖 token、类型化语法树、模板、格式化与诊断。设计目标包括:依赖尽量少(非可选外部依赖主要是 unicode-ident);性能上与 syn 对标;用自维护 EBNF 与 grammar fixtures 持续校验解析覆盖;保留 zyn 风格的模板/paste 类准引用;同时支持 stable 与 nightly。
module-cycles 这个 lint 是做什么的?它检测什么类型的循环依赖?
module-cycles 是一个 Dylint lint,用于报告“兄弟模块”之间的循环依赖。兄弟模块指共享同一父模块的子树;若两个兄弟模块彼此引用则告警。父子互用(把一个模块拆成多文件)不报。
如何使用 module-cycles 检测循环依赖?
通过 workspace metadata 挂 Dylint library 后执行 cargo dylint;可用 DYLINT_RUSTFLAGS="-D module_cycles" 把警告升为失败。