Qt 官方推出面向 Rust 的 UI Bridge
Qt 公司博客介绍 Qt Bridges 面向 Rust 的公开 beta:在保留 Rust 业务代码的前提下,接入 Qt Quick 的 UI 能力、硬件加速与跨平台支持(Linux / macOS / Windows)。目标是把汽车仪表、医疗与工业场景已验证的 Qt 成熟度提供给 Rust 开发者;相对 Iced、egui 等仍在生产落地中的框架,强调功能完整度与商业支持。
此前生态里有 qmetaobject-rs(QML + Rust,现偏维护状态)与 CXX-Qt(更适合已有 C++ 团队)。Qt Bridge 侧重“只写 Rust”:不直接碰 C++ 头文件与手工 FFI,UI 用 QML(可辅以 JavaScript),业务侧通过属性宏与 trait 的精简 API 交互。QML 对象在 Rust 侧以 Rc<RefCell<T>> 共享引用暴露,借用规则在运行时检查;编译期为 Rust 类型生成 Qt 包装,负责对象创建、方法调用、属性访问与 signal 等。用户代码本身无 C++,但当前版本构建仍需本机 C++ 工具链与 qmake;官方计划通过预编译产物等方式减轻该要求。用法上在 Cargo.toml 加 qtbridge 依赖,用 #[qobject] / #[qslot] 等标注后即可在 QML 中引用。示例仓库:qt/qtbridge-rust-examples。路线图是向 Technology Preview(TP)推进。
原文链接:https://www.qt.io/blog/rust-ui-framework-via-bridging-technology
rust-mqtt 0.6.0:嵌入式向 MQTT 客户端补齐 MQTTv5
rust-mqtt 是面向 no_std 的异步 MQTT 客户端,I/O 基于 embedded_io_async;当前以 MQTT 5.0 为主。作者约一年前接手无人维护的项目并重写,半年前曾发帖说明进展;0.6.0 补齐此前缺失的 MQTTv5 能力,重点是完整的增强认证(enhanced authentication),并加入手动/延迟确认(manual acknowledgments)。
设计上尽量用类型系统贴近规范:会话状态、配置、QoS 投递与重试由用户掌控,不做自动重连、keepalive 循环或后台任务等意见化连接管理,提供可取消安全的协议原语,适合上层客户端与资源受限嵌入式。已覆盖 Will、QoS 0/1/2 双向发布、流控、会话恢复、主题别名、共享/通配订阅、消息过期、Request/Response、User Property 与增强认证等。已知限制包括单包多主题订阅尚未支持、有序主题保证未内建(单 packet id 并发时约束可放宽)。后续计划包括 MQTT 3.1.1、更灵活的内存与 I/O,以及在坚持 no_std/no_alloc 主目标的同时改善 std/桌面体验。
原文链接:https://github.com/obabec/rust-mqtt
Moxy:面向过程宏的 Rust 语法工具栈
Moxy 是一套面向过程宏的 Rust 语法工具,覆盖 token、类型化语法树、模板、格式化与诊断。作者此前发布过过程宏模板引擎 zyn,社区反馈希望少依赖 syn / proc-macro2 / quote;Moxy 从零重写,非可选外部依赖目前主要是 unicode-ident,其余核心语法栈自研。
目标包括:依赖尽量少;性能上与 syn 对标(作者基准里 compile time 仍偏 syn,runtime 有时 Moxy 更好,目标并非全面超越);用自维护 EBNF 与系统化 grammar fixtures(attributes、表达式、泛型、items、宏、paths、patterns、语句、类型、可见性与 lexer 等)持续校验解析覆盖;保留 zyn 风格的模板/paste 类准引用;并类似 proc-macro2 同时支持 stable 与 nightly,以便在 stable 上提供编译器诊断能力。功能按 feature 分层(token/ast/template/fmt/diagnostic 等)。项目仍早期、API 会变,作者欢迎语法覆盖与架构反馈。仓库:https://github.com/aacebo/moxy
原文链接:https://github.com/aacebo/moxy
module-cycles:用 Dylint 检测兄弟模块循环依赖
module-cycles 是一个 Dylint lint,用于报告“兄弟模块”之间的循环依赖。Clippy 自 2020 年起有相关 issue(#5782)尚未落地,作者据此实现。兄弟模块指共享同一父模块的子树;若 model 与 report 彼此引用则告警。父子互用(把一个模块拆成多文件)不报。依赖来自 rustc 名字解析结果:路径、use/re-export、方法调用与关联函数都算;外部 crate 宏展开的引用会跳过,本 crate 宏写出的引用会计入并标在调用点。
每个环只报一次,并 note 最短环上的其余边;建议把共享项挪到其中一侧或双方共同依赖的模块。作者在自己的 workspace 扫到 11 个环(最长经 12 个模块),在 Clippy 测试用的 26 个 crate 上扫到 41 个(含 tokio)。通过 workspace metadata 挂 Dylint library 后执行 cargo dylint;可用 DYLINT_RUSTFLAGS="-D module_cycles" 把警告升为失败。
原文链接:https://github.com/HardMax71/module-cycles
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论