Embassy - 新一代嵌入式应用开发框架
Embassy 是一个用于嵌入式应用的现代化框架,利用 Rust 编程语言及其异步功能来编写安全、正确且高能效的嵌入式代码。
核心特点
Rust + 异步 ❤️ 嵌入式
- Rust 语言运行速度快、内存效率高,无需运行时、垃圾回收器或操作系统
- 编译时内存和线程安全检查,强大的类型系统可在编译阶段捕获大量错误
- 异步/等待(async/await)机制使嵌入式系统的多任务处理变得简单高效
- 任务在编译时转换为状态机并协作运行,无需动态内存分配
- 单栈运行,无需调整每个任务的栈大小
- 取代传统 RTOS 内核上下文切换,性能更快、体积更小
主要功能
硬件抽象层(HAL)
- 为多种硬件提供安全的 Rust API,无需直接操作寄存器
- 支持 STM32、Nordic nRF 系列、树莓派 RP2040、ESP32 等芯片
时间管理
- 全局可用的时间 API,无需手动配置硬件定时器
- 提供不会溢出的 Instant、Duration 和 Timer 类型
原文链接:https://embassy.dev/
Aube - 新一代 Node.js 包管理器
Aube (发音 "ohb") 是一个快速的 Node.js 包管理器,可以无缝集成到现有的 JavaScript 和 TypeScript 项目中,无需迁移锁文件。
核心亮点
01 速度优势
- 比 pnpm 快 4.6 倍
- 比 bun 快 2.6 倍
- 是目前最快的 Node.js 包管理器
02 锁文件兼容性
- 支持读写现有的
yarn.lock、pnpm-lock.yaml或package-lock.json - 无需强制团队进行迁移
- 直接在原有锁文件上工作
03 智能脚本运行
aubr test命令会在依赖变更时自动安装- 重复运行时自动跳过安装步骤
- 提供
aubx用于一次性工具执行
04 磁盘空间节省
- 比 npm 节省 90% 的磁盘空间
原文链接:https://aube.en.dev/
Rust 枚举转换实现的安全性问题
背景
一位开发者在编写国际象棋引擎时,希望实现枚举(enum)与数字之间的双向转换。虽然枚举转数字很简单(使用 as usize),但反向转换较为复杂。
当前实现方案
开发者使用了 unsafe 代码和 std::mem::transmute 来实现 usize 到 Piece 枚举的转换:
- 检查输入值是否 ≤ 5
- 使用
transmute将u8强制转换为Piece枚举 - 超出范围则返回错误
核心问题
开发者询问这种实现方式是否可靠,会不会在后续开发中产生问题。
潜在风险
- 使用
unsafe代码需要格外小心 transmute依赖于枚举的内存布局,可能因编译器优化而改变- 如果未来修改枚举定义(如调整顺序、添加字段),可能导致未定义行为
更安全的替代方案
社区通常建议使用 match 语句或第三方库(如 num_enum、strum)来实现此类转换,避免使用 unsafe 代码。
原文链接:https://www.reddit.com/r/rust/comments/1t372r1/is_this_a_bad_idea/
Black Sea - 终端多人航海游戏
Black Sea 是一款基于终端的多人航海游戏,游戏背景设定在斯德哥尔摩群岛。玩家可以通过真实的 GIS 海岸线数据驾驶船只,探索岛屿,并与其他玩家聊天。
安装方式
macOS 系统(通过 Homebrew):
直接下载二进制文件:
- macOS(Apple Silicon):black-sea-client-macos-aarch64
- macOS(Intel):black-sea-client-macos-x86_64
- Linux:black-sea-client-linux
- Windows:black-sea-client-windows.exe
游戏操作
| 按键 | 功能 |
|---|---|
| 方向键 | 驾驶船只 |
| Enter | 发送聊天消息 |
| Esc | 退出游戏 |
从源码构建
系统要求: Rust 1.85+
原文链接:https://github.com/dtennander/black-sea
评论区
写评论还没有评论