【Rust日报】2026-10-05 CPython 拟给 zlib 加可选 Rust 实现
内容提要
2026年Python峰会讨论为CPython引入可选Rust实现,首选zlib模块,计划2027年随3.16提供,2029年或成必需项。typex是运行时反射库,支持按字段名读写和回滚。Cinebox用egui嵌入mpv,电视端改用ExoPlayer。Rust OSDev月报称Allocator trait进入stable,uefi发布新版本。
延伸解读
CPython 引入 Rust 的渐进路线
提案将 zlib 作为首个可选 Rust 实现,计划 2027 年随 Python 3.16 提供,保留 C 代码回退。2028 年考虑扩展到 io、json 等模块,2029 年可能将 Rust 列为构建必需项。成功标准包括核心开发者接受度、性能不下降和全平台支持。依赖管理是潜在障碍,RustPython 仅作 API 设计参考。
typex 的定位与能力边界
typex 是运行时反射库,支持按字段名读写、遍历和比较值,自定义类型需派生 Meta。MutationBatch 可批量提交修改并回滚。它支持 no_std + alloc,无 unsafe 和运行时依赖。与 bevy_reflect 相比,typex 不包含实例化和反序列化,专注于结构访问、修改和相等比较。
Cinebox 跨平台播放的取舍
Cinebox 桌面端用 egui 嵌入 libmpv,通过 OpenGL 渲染实现控件覆盖;Android TV 因 mpv 兼容性问题改用 ExoPlayer 解码到 SurfaceView。该方案支持 4K、HDR10 和 Dolby Vision,但 SurfaceView 透明区域会导致全屏时控件和字幕消失,需覆盖 gatherTransparentRegion 恢复。
Rust OSDev 九月进展要点
Allocator trait 及其相关类型进入 stable,允许为单个集合指定分配器。atomic_volatile 提供不稳定的原子易失操作,面向 DMA 等共享内存场景。uefi 项目修正了内存映射和空指针处理,并发布多个新版本。Kangrejos 2026 会议链接了 pin-init、field projection 等主题的幻灯片。
Q&A
CPython 计划如何引入 Rust 实现?
CPython 计划将 zlib 模块作为第一个可选 Rust 实现,使用 zlib-rs。时间表:2026 年夏完成构建系统、CI 和 Rust API 概念验证;2026 年末用 PEP 定义成功标准;Python 3.16(2027 年 10 月)提供可选的 Rust zlib 和私有 Rust API,现有 C 代码保留作回退;Python 3.17(2028 年 10 月)处理平台问题,并考虑把 Rust 用到 io、json、xml、memoryview 和 parser;最早在 Python 3.18(2029 年)把 Rust 变成构建 CPython 的必需项,并公开 Rust API。
typex 库的主要功能是什么?
typex 是一个运行时反射库,可以在不知道具体类型的情况下检查、遍历、比较和修改值。常见标量和集合开箱可用;自定义结构体和枚举用 #[derive(Meta)],修改走 MetaMut。值包进 Object 后可以按字段名读取,例如 field("count") 取出 u8。MutationBatch 可以把 set、push_item 等补丁一次提交,再用 rollback.undo() 回到提交前。支持 no_std + alloc,默认 std 特性才带 HashMap;没有运行时依赖,也不使用 unsafe。
Cinebox 在电视端为什么放弃 mpv 改用 ExoPlayer?
Cinebox 作者在 Android TV 上尝试使用 mpv 时遇到问题:在 Amlogic 盒子(Mali-G31)上,高于 1080p 时 mediacodec-copy 只返回四分之一分辨率画面;零拷贝 MediaCodec 进 ImageReader 起不来,下一次尝试直接重启了盒子;mpv 的 GL 管线画不出画面,只有 gpu-dumb-mode 可用。因此播放器被收成 Player trait:桌面继续用 libmpv,Android 用 Media3 ExoPlayer,解码到透明 egui 窗口下面的 SurfaceView。这条路径现在能播 4K、HDR10 和 Dolby Vision。
Rust OSDev 九月月报中 Allocator trait 进入 stable 带来了哪些变化?
Allocator trait 的 MVP 在多年 feature gate 之后进入 stable,同时稳定的还有 Box<T, A>、Vec<T, A>、Global 和 *_with_allocator 方法,稳定版可以给单个集合指定分配器;旧特性剩余部分挪到 allocator_ext。此外,atomic_volatile 给原子类型加了不稳定的 load_volatile / store_volatile,面向和设备或其他地址空间共享的内存,例如 DMA buffer。
CPython 引入 Rust 的成功标准草案有哪些?
成功标准草案有三条:多数活跃核心开发者愿意用 Rust API 写功能;CPython 性能基准没有明显变慢;所有分级平台都要有 Rust 支持。
typex 和 bevy_reflect 有什么区别?
bevy_reflect 覆盖结构信息、动态值和序列化;typex 的范围是结构访问、修改和相等比较,不包含实例化和反序列化。