This Week in Rust #606
阅读:https://this-week-in-rust.org/blog/2025/07/02/this-week-in-rust-606/
Rust 官方博客:稳定裸函数 (naked functions)
作者:Folkert de Vries
Rust 1.88.0 稳定了 #[unsafe(naked)]
属性和 naked_asm!
宏,用于定义裸函数。
裸函数用 #[unsafe(naked)]
标记,其主体是单个 naked_asm!
调用,如示例中的 wrapping_add
函数。其特殊之处在于手写汇编块定义了整个函数主体,编译器不会对参数或返回值做特殊处理。
裸函数相比 global_asm!
有诸多优势:
- 自动发出平台相关的正确指令
- 参与 Rust 的名称修饰,避免符号冲突
- 可使用常量泛型
- 安全文档和属性有统一的定义位置
从 2015 年的原始 RFC 到如今稳定,历经多次改进,如引入 naked_asm!
宏,将裸函数降级为全局汇编以解决代码生成问题。
未来,还将继续改进汇编相关功能,如 extern "custom"
函数和 #[cfg_asm]
特性,以提升开发体验。
阅读:https://blog.rust-lang.org/2025/07/03/stabilizing-naked-functions/
Reddit:https://www.reddit.com/r/rust/comments/1lr29ni/stabilizing_naked_functions_rust_blog/
其他参考链接
rustc_codegen_cranelift 进展报告
作者:bjorn3
自上次报告以来,rustc_codegen_cranelift
项目取得了显著进展,共有 476 次提交。以下是过去七个月的主要成就:
- 异常处理:Cranelift 现已支持 Linux 上的栈展开清理。作者在本科毕业论文中实现了这一功能,但因一些问题未能合并。两个月前,Cranelift 的主要作者 Chris Fallin 开始实现异常处理支持,解决了之前遇到的寄存器分配器限制。目前,cg_clif 中的异常处理默认禁用,因为它在 Windows 和 macOS 上尚未实现,且存在一些构建性能问题。
- ARM 支持:CI 现在在原生 arm64 Linux 系统上构建和测试,而不是在 QEMU 中测试部分测试用例。arm64 上的内联汇编现在可以使用向量寄存器,且 half 和 bytecount crate 在 arm64 上已修复。
- f16/f128 支持:用户 @beetrees 贡献了对不稳定 f16 和 f128 类型的支持。
- 代码生成后端共享代码:作者向 rustc 提交了两个 PR,以在代码生成后端之间共享更多代码,减少 cg_clif 和 rustc 的维护负担。
- SIMD:实现了一些新的供应商内联函数。
- ABI:改进了 128 位整数 libcalls 的 ABI 处理,并更新了测试的 abi-cafe 版本至 1.0。
尽管取得了一些进展,但仍面临一些挑战:
- SIMD:虽然
core::simd
通过标量操作完全支持,但core::arch
中的许多平台特定供应商内联函数尚未支持。如果程序使用了不受支持的供应商内联函数,编译时会发出警告,运行时会因未实现的内联函数而中止。 - ABI:与 LLVM 仍存在一些 ABI 兼容性问题。在 arm64 Linux 上存在与 C ABI 的小不兼容性,但 Rust ABI 工作正常;在 arm64 macOS 上存在影响 Rust ABI 的 ABI 不兼容性,因此不建议在此平台上混合使用 cg_clif 和 cg_llvm;在 x86_64 Windows 上存在涉及 i128 的返回值不兼容性。
项目始终欢迎贡献,感兴趣的开发者可以查看“适合新手的问题”,并在遇到困难时联系作者(@bjorn3)寻求帮助。
阅读:https://bjorn3.github.io/2025/06/30/progress-report-june-2025.html
Reddit:https://www.reddit.com/r/rust/comments/1lqet2y/progress_report_on_rustc_codegen_cranelift_june/
文章《Rust 临时变量的可怕且令人惊讶的深兔子洞》
这篇文章深入探讨了 Rust 中的临时值(temporaries)机制。
文章从一个简单的例子出发,解释了临时值的创建条件、生命周期以及与值表达式和位置表达式的关系。
文章指出,临时值是匿名内存位置,其生命周期通常到包含它的语句结束。
文章还讨论了常量提升(constant promotion)和生命周期扩展(lifetime extension)两种特殊情况,这些情况会影响临时值的生命周期。
常量提升允许某些表达式在编译时评估并存储为静态值,而生命周期扩展则在特定模式或表达式中延长临时值的生命周期。
通过这些机制,Rust 编译器能够更灵活地处理临时值,同时避免悬挂引用等错误。
阅读:https://taping-memory.dev/temporaries-rabbit-hole/
Reddit:https://www.reddit.com/r/rust/comments/1lqrqx7/the_scary_and_surprisingly_deep_rabbit_hole_of/
Vecstore:使用 Rust 构建生产级别的 ML API
技术栈:
- 机器学习模型基于 Candle
- API 使用 Axum + Tokio
- 用于搜索的向量数据库
Rust 在这里表现良好的原因: 项目结构扩展性极佳、内存在负载下保持可预测、单一二进制部署以及云实例上更好(最佳)的资源利用率。
功能: 语义搜索 + 内容审核。您可以通过描述来搜索图片(“拿着吉他的女孩”),也可以通过含义来查找文本(“关于身着飞行服的亿万富翁的电影”→钢铁侠)。此外,还可以使用特定标签进行 NSFW 检测。
Reddit:https://www.reddit.com/r/rust/comments/1lquib5/built_a_production_ml_api_in_rust/
Task-supervisor:监视 tokio 任务的库
task-supervisor
是一个用于管理 Tokio 任务的 Rust 库。
它能监视任务,若任务崩溃或无响应则重启,并支持在运行时动态添加、重启或终止任务。
它提供自动重启(含指数退避)、动态控制、可配置健康检查等功能。
使用 SupervisorHandle
可进行任务管理,如添加、重启、查询状态等。
仓库:https://github.com/akhercha/task-supervisor
Reddit:https://www.reddit.com/r/rust/comments/1lqnglm/task_supervisor_for_tokio/
讨论:有没有人在面试时用 Rust 写 leetcode?
阅读:https://www.reddit.com/r/rust/comments/1lq7h2b/any_professional_rust_folks_get_leetcoded_in_rust/
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论