【Rust日报】2026-09-07 Gecko 模拟器大更新可玩 Galaxy
内容提要
Gecko模拟器用Rust实现GameCube/Wii游戏,性能大幅提升,新增存档功能,多款游戏可玩。另有ESP32用Rust实现SWD编程器、Empower可视化编程引擎,及讨论Rust中drop顺序是否应作为API契约。
延伸解读
Gecko 模拟器更新亮点
Gecko 模拟器本次更新显著提升了性能,使多款原本无法流畅运行的游戏达到可玩状态,如 LEGO Batman 和 Super Mario Galaxy 系列。新增的 savestates 功能允许玩家随时存档,增强了实用性。调试器还引入了 freecam 模式,便于逆向工程和场景观察。这些改进表明 Gecko 在追求可玩性的同时,仍保留了面向开发者的高级功能。
ESP32 实现 SWD 编程器的意义
该实验展示了使用 ESP32 和 Rust 实现 SWD 协议的可能性,为嵌入式开发提供了低成本替代方案。文章详细介绍了 bit-bang 实现和 JTAG 到 SWD 的切换序列,对理解底层协议有教学价值。但需注意,当前仅实现了 IDCODE 读取,固件刷写功能尚未完成,实际应用仍需后续开发。
Empower 可视化编程引擎的定位
Empower 作为 Rust 和 egui 开发的可视化编程引擎,旨在兼顾初学者和复杂逻辑开发者。其架构分为引擎、Studio 和运行时三部分,体现了模块化设计。目前项目仍处于概念验证阶段,支持平台有限,但为 Rust 在可视化编程领域的应用提供了探索。
Drop 顺序的 API 契约讨论
文章讨论了 Rust 中 drop 顺序是否应作为 API 契约的问题。作者发现不同实现可能导致元素析构顺序不同,这会影响依赖 drop guard 的代码。该讨论提醒开发者,在实现容器或迭代器时,应明确析构顺序的语义,避免因实现细节变化而破坏用户代码的预期。
Q&A
Gecko模拟器是什么?它有哪些主要功能和特点?
Gecko是一个用Rust编写的GameCube/Wii模拟器与调试器,旨在支持Homebrew、逆向工程和游戏体验。它使用Cranelift进行PowerPC、DSP和顶点解码的JIT编译,渲染采用wgpu,并提供egui调试UI、FIFO录制/回放、Lua脚本和MCP等开发者工具。支持Windows、Linux、macOS以及x86和ARM平台。
Gecko模拟器最新更新带来了哪些改进?
最新更新带来了整体性能提升,许多原本帧率不足的游戏现在可玩,例如LEGO Batman。新增了存档功能(savestates),允许在任意时刻保存和恢复进度。调试器支持freecam,可以解锁相机自由观察场景。此外,Super Mario Galaxy系列和多款LEGO游戏已完全可玩,dev/nightly分支还修复了Xenoblade Chronicles。
如何获取Gecko模拟器的构建版本?
Gecko模拟器在GitHub上提供每日nightly构建,可以访问其GitHub仓库获取。此外,截图兼容库可在emu.layle.dev查看。
ESP32 SWD编程器项目是如何实现的?
该项目使用ESP32 DevKit作为SWD主机,通过Rust bit-bang实现与STM32F103C8T6 Blue Pill的Serial Wire Debug通信。硬件连接为GPIO18接SWCLK(PA14),GPIO19接SWDIO(PA13),并共地。软件上使用Flex管理双向SWDIO,实现了clock、write_bit/read_bit以及LSB-first的多位读写,并按ARM规范完成JTAG到SWD的切换序列。目前实现了读取目标DP的IDCODE,固件刷写留待后续。
Empower可视化编程引擎是什么?它的架构如何?
Empower是一个用Rust和egui开发的可视化编程引擎,开发历时约三年,架构接近游戏引擎,旨在服务初学者和需要复杂逻辑的开发者。它允许用户在图形编辑器中构建程序,并导出为独立可执行文件。仓库分为三部分:Empower Engine提供节点图、资源、项目、编译、执行和导出等基础能力;Empower Studio是immediate-mode GUI前端,包含停靠窗口、项目/导出编辑和可视化日志;Empower Application是目标机上的运行时可执行文件,计划支持Linux、macOS和Windows。当前定位为概念验证。
Rust中drop顺序是否应该作为API契约的一部分?
文章讨论了在实现类似smallvec的crate时,Iterator::nth_back的默认实现会按反向顺序drop元素,而使用ptr::drop_in_place批量销毁则变为正向drop。标准库的std::vec::IntoIter::nth_back也是正向drop。作者提出疑问:在Rust中,drop guard很常见,跳过中间元素时的析构顺序是否应被视为函数API契约的一部分,还是仅作为实现细节。相关行为可参考Rust Reference的destructors章节。