< 返回版块

苦瓜小仔 发表于 2025-07-04 08:12

Tags:日报

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 次提交。以下是过去七个月的主要成就:

  1. 异常处理:Cranelift 现已支持 Linux 上的栈展开清理。作者在本科毕业论文中实现了这一功能,但因一些问题未能合并。两个月前,Cranelift 的主要作者 Chris Fallin 开始实现异常处理支持,解决了之前遇到的寄存器分配器限制。目前,cg_clif 中的异常处理默认禁用,因为它在 Windows 和 macOS 上尚未实现,且存在一些构建性能问题。
  2. ARM 支持:CI 现在在原生 arm64 Linux 系统上构建和测试,而不是在 QEMU 中测试部分测试用例。arm64 上的内联汇编现在可以使用向量寄存器,且 half 和 bytecount crate 在 arm64 上已修复。
  3. f16/f128 支持:用户 @beetrees 贡献了对不稳定 f16 和 f128 类型的支持。
  4. 代码生成后端共享代码:作者向 rustc 提交了两个 PR,以在代码生成后端之间共享更多代码,减少 cg_clif 和 rustc 的维护负担。
  5. SIMD:实现了一些新的供应商内联函数。
  6. ABI:改进了 128 位整数 libcalls 的 ABI 处理,并更新了测试的 abi-cafe 版本至 1.0。

尽管取得了一些进展,但仍面临一些挑战:

  1. SIMD:虽然 core::simd 通过标量操作完全支持,但 core::arch 中的许多平台特定供应商内联函数尚未支持。如果程序使用了不受支持的供应商内联函数,编译时会发出警告,运行时会因未实现的内联函数而中止。
  2. 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 检测。

网站:https://vecstore.app/

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 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页