Rust 1.99.0 发布:可变参数与指针布局

稳定 C ABI 可变参数与原始指针布局,更新 Box::leak 文档

UniMgr 技术编辑 来源:技术源整理 22
Rust 1.99.0 发布:可变参数与指针布局

Rust 1.99.0 正式发布,已通过 rustup 安装旧版本的用户可执行 rustup update stable 升级。本次稳定 extern "C" 与 "C-unwind" ABI 的可变参数函数定义,其 ... 类型为 VaList、受 VaArgSafe trait 约束;稳定 Layout::for_value_raw、mem::size_of_val_raw、mem::align_of_val_raw 三个函数以获取原始指针的大小与对齐。此外无语言语义变更,仅更新 Box::leak 文档,不推荐先 leak 之后再释放内存的做法。

技术要点

Rust 1.99.0 是 Rust 团队发布的稳定版本,Rust 是让每个人都能构建可靠、高效软件的语言。已通过 rustup 安装旧版本的用户可执行 rustup update stable 获取 1.99.0;未安装 rustup 的用户可从官网对应页面获取。有意参与未来版本测试的用户可切换到 beta 通道(rustup default beta)或 nightly 通道(rustup default nightly)。

配图
配图

1.99.0 stable 主要包含三项内容:

其一,稳定 extern "C" 可变参数函数。本次稳定使用 "C" 与 "C-unwind" ABI 定义 C-ABI 可变参数函数的能力,这类函数通过 ... 表示可变参数列表、可接收任意数量参数。此前 Rust 已能调用外部定义的可变参数函数(如 libc::printf),1.99 起可在 Rust 自身中编写此类函数。... 的类型为 VaList,跨目标与 C 的 va_list ABI 兼容;能从 VaList 读取哪些类型由 VaArgSafe trait 约束。

其二,从原始指针获取布局信息。本次明确了从原始指针获取大小与对齐时的安全要求,覆盖 Sized 与非 Sized 类型,通过稳定 Layout::for_value_raw、mem::size_of_val_raw、mem::align_of_val_raw 三个函数实现。

其三,不推荐 Box::leak 后的「再释放」写法。1.99 无语言语义变更,仅更新了 Box::leak 文档,建议避免先 leak 之后再释放内存的模式。

原理与背景

可变参数函数在跨语言边界中十分常见。C ABI 可变参数函数通过 ... 接收不定数量参数,Rust 此前只能作为调用方使用(例如调用 libc 的 printf),无法用 Rust 编写。1.99 补齐了这一方向,允许在 Rust 中定义 C-ABI 可变参数函数,使 Rust 也能作为提供方参与跨语言交互。... 对应的 VaList 与 C 的 va_list 在 ABI 层面兼容,保证底层调用约定统一;VaArgSafe trait 则从类型安全角度约束可从 VaList 读取哪些类型,避免不安全读取。

原始指针布局信息方面,获取 Sized 类型的大小与对齐此前已可在稳定版完成,但非 Sized 类型的安全要求此前未定。本次稳定三个函数,明确了针对两种类型的访问安全边界,为底层内存操作提供稳定的 API 支撑。

关于 Box::leak 的文档调整,动机在于先 leak 之后再释放内存的代码与当前及未来潜在的编译器优化存在不良交互,尤其在自定义分配器即将稳定之际问题更为突出,因此团队选择在文档层面给出指引而非改动语言语义。

落地建议

准备升级的用户建议先通过 rustup update stable 将本地工具链更新到 1.99.0,再在测试环境中验证项目能否正常编译与运行,确认依赖库与新版本兼容后再推广到生产。

若需在 Rust 中定义 C-ABI 可变参数函数,注意函数体处于 unsafe 上下文,调用方需保证参数数量与类型满足约定;读取 VaList 时应确保所读类型满足 VaArgSafe trait。

使用原始指针获取布局信息时,Layout::for_value_raw、mem::size_of_val_raw、mem::align_of_val_raw 虽已稳定,仍需对指针所指对象的生命周期与有效性负责,确保指针合法后再调用。

对于已使用 Box::leak 的代码,建议审视是否存在「先 leak 之后再释放」的写法,如有则按新文档建议调整,避免与未来编译器优化及自定义分配器的交互带来问题。

技术分享更多资讯

查看全部
布里吉斯游戏引擎更新:波次与技能机制重构
技术分享

布里吉斯游戏引擎更新:波次与技能机制重构

游戏开发者布里吉斯发布最新技术更新,重点重构了敌人波次生成逻辑与干员技能释放机制。此次更新涉及底层数据配置与快照保存系统的优化,为后续数据库更新及前端开发奠定基础。开发者透露将学习Unity引擎技术,并计划未来转向自研引擎,标志着项目从原型向工业化开发的重要转型。

AI 编辑 3
Agent 上下文治理全景原则篇:构建目标导向的智能判断体系
技术分享

Agent 上下文治理全景原则篇:构建目标导向的智能判断体系

本文聚焦 Agent 上下文治理的核心原则,从目标、依据、边界、记忆、探索及进展六个维度,深入剖析上下文机制如何辅助智能体围绕既定任务进行持续且精准的判断。通过明确各机制职责,旨在提升 Agent 在复杂环境下的任务执行效率与稳定性,为构建更可靠的 AI 系统提供理论框架与实践指导。

AI 编辑 3
Python 3.13 引入 Queue.shutdown 解决异步退出难题
技术分享

Python 3.13 引入 Queue.shutdown 解决异步退出难题

Python 3.13 正式引入 Queue.shutdown 方法,旨在解决异步消费者在收到停止信号后难以优雅退出的长期痛点。此前,开发者需手动处理取消信号,常导致部分已取出的任务处理中断或资源泄漏。新特性简化了异步队列的生命周期管理,提升了并发编程的可靠性与代码简洁性,对 Python 异步生态具有积极意义。

AI 编辑 4
游戏团队管理进阶:从被动救火到主动规划
技术分享

游戏团队管理进阶:从被动救火到主动规划

本文基于对游戏团队管理实践的深入思考,指出许多管理者陷入“解决问题”的时间陷阱。通过定期复盘日程,作者发现大量精力耗费在应对架构、需求及人员冲突等突发状况上。文章主张管理者应转变思维,从被动响应转向主动发现潜在问题,优化团队效能,避免陷入低效的救火循环,为游戏行业团队管理提供新的视角。

AI 编辑 3