教程:使用Rust语言开发一个Game Boy模拟器 第一步
这篇文章介绍了使用Rust语言开发一个Game Boy模拟器的第一步 - 内存管理。主要内容包括:
-
Rust中的包(Package)、箱(Crate)和模块(Module)的概念,以及它们的层级关系。
-
Game Boy的内存映射情况,包括不同区域内存的用途。
-
在Rust中使用结构体(struct)和实现(impl)关键字创建RAM模块,定义了一个65536字节的u8类型数组来模拟Game Boy的内存。
-
实现了RAM模块的读取(read)功能,通过地址(u16)返回该位置的字节值(u8)。
-
解释了Rust中实例方法需要使用&self作为第一个参数的原因和用途。
-
介绍了Rust中无符号整数u8、u16等的概念。
总的来说,这是作者探索使用Rust语言开发Game Boy模拟器的第一篇文章,着重介绍了Rust的模块化编程和内存管理的实现。
wasmtime与cranelift集成的一些进展
这篇文章介绍了 Wasmtime 和 Cranelift 对栈映射(stack map)基础设施的改进。栈映射用于垃圾收集,它描述了在安全点(safepoint)上活跃对象在栈帧中的位置,以避免使用后错误。
文章解释了旧的栈映射实现方式存在一些缺陷和复杂性,例如需要在编译器的大部分流程中追踪垃圾收集引用、可能导致未优化或错误优化等。
新的栈映射实现将栈映射生成从寄存器分配移动到了早期的中间代码生成阶段。这简化了编译器,使中期能够正确地优化代码,并避免对垃圾收集引用做不必要的区分。该改进还允许在 64 位系统上使用 32 位的垃圾收集引用,提高了密集性。
总的来说,这个改进降低了 Wasmtime 和 Cranelift 的复杂性,改善了优化效果,并为进一步的垃圾收集支持做好了准备。
https://bytecodealliance.org/articles/new-stack-maps-for-wasmtime
如何更好地实现.env文件
这位新手Rust程序员希望找到一种集中和自动加载单独的.env文件来覆盖基础.env文件中定义的值的方法,以在命令行运行单元测试和集成测试时使用。他列出了三种可能的方法:
-
在项目根目录下有.env和.env.test文件,后者在cargo test时自动覆盖前者的值。
-
在cargo test时使用 --config-override参数指定一个.env.test文件路径。
-
在单个.env文件中使用子标题声明不同环境的覆盖值,并在cargo test时传入 --config-override标识符。
他希望找到Rust中类似的解决方案,还想知道如何集中覆盖不同环境(如staging、production等)的环境变量。
https://old.reddit.com/r/rust/comments/1fdnm2f/in_rust_how_to_centrally_load_and_override/
使用Rust开发贪吃蛇小游戏
这个仓库包含一个用Rust编写的简单贪吃蛇游戏。该游戏支持墙壁碰撞、自我碰撞和吃食物长蛇身。游戏顶部会记录分数,并且会跟踪每局的最高分。游戏有一个主菜单用于开始游戏,在发生碰撞后也会回到主菜单。游戏共有4个不同难度级别,前3个难度通过改变蛇的速度实现,最后一个特殊难度会根据当前分数动态改变蛇的速度。
该项目最初发布了v0.1.1版本,包括基本的游戏功能。v1.0.0版本增加了主菜单、高分记录等功能,并为macOS和Windows提供了发布包。v1.2.0版本支持调整窗口大小,新增4个游戏难度模式,但高分数据的持久化保存仍在实现中。该游戏使用了GGEZ游戏开发框架。
https://github.com/Feromond/rust_snake_game
--
From 日报小组 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论