Rustup 1.29.0 现已开启测试
核心更新是通过并发下载与解压组件显著提升了工具链的安装性能。
该版本新增了对两个 Solaris 平台以及 tcsh 和 xonsh Shell 的支持。
改进了对 rust-analyzer 的处理逻辑,并在环境变量处理中将空值视作未设置。
用户可以通过设置 RUSTUP_UPDATE_ROOT 环境变量来切换至开发环境参与此次测试。
阅读:https://blog.rust-lang.org/inside-rust/2025/12/20/rustup-1.29.0-beta-cft/
微软利用 AI 加速从 C/C++ 向 Rust 迁移
由微软 CoreAI 首席软件工程师 Galen Hunt(曾任 Azure Sphere 负责人、Singularity 研究项目负责人)发布。
微软正通过 AI 技术(由系统老兵 Galen Hunt 领衔)解决 C/C++ 迁移到 Rust 的高昂成本问题,标志着“AI 驱动的大规模系统重构”时代的到来。
- 重大战略转向:Galen Hunt 宣布微软正在发起一项大规模倡议,旨在利用人工智能(AI)辅助编码技术,将其庞大的 legacy(遗留)C/C++ 代码库迁移到 Rust。
- AI 的角色:文章强调,手动将数千万行 C/C++ 代码重写为 Rust 在工程量上是不可行的。微软现在正利用大语言模型(LLMs)和专门的 AI 工具(来自 CoreAI 团队)来自动化这一过程,包括处理内存所有权转换、借用检查等 Rust 的复杂特性。
- 系统安全与可靠性:这一举动的根本目的是彻底解决内存安全问题。作为微软系统的功勋专家,Hunt 指出,利用 AI 克服 Rust 学习曲线和重写成本,是实现“安全系统”愿景的必经之路。
- Galen Hunt 的角色变化:他本人已从 Azure Sphere 团队转向微软的 CoreAI 团队。他现在的研究重心是“将 LLM 应用于解决系统软件中的长期挑战”,而代码迁移正是这一方向的首个重大应用。
- 行业影响:这一消息在 Reddit 和开发者社区(如 r/programming)引发了巨大讨论。它被视为微软对“内存安全编程”承诺的进一步落实,同时也展示了 AI 在底层系统工程(而不只是应用层)中发挥的关键作用。
讨论:https://www.reddit.com/r/rust/comments/1pr625d/my_goal_is_to_eliminate_every_line_of_c_and_c/
EuroRust 演讲:使用 GPU-UI 以每秒 100 万像素的速度渲染
现代计算机速度飞快,但现代软件很少能充分发挥其性能极限。我们将探讨 Zed 的图形框架 (GPUI),以及它如何帮助你用 Rust 构建一个跨平台应用程序,实现每 8 毫秒渲染一帧到整个屏幕。其编程模型类似于 React,UI 以声明式树的形式呈现,但它并非使用笨重的 JavaScript,而是由完全用 Rust 构建的超高速渲染管线驱动。
演讲者信息:康拉德·欧文 (Conrad Irwin) 是一位毕生致力于技术的专家。他创造了许多令人愉悦的工具,帮助人们提高工作效率。康拉德目前正在开发 Zed,这是一款面向下一代的代码编辑器,旨在实现人与人工智能之间的高效协作。作为一个大型 Rust 开源项目,Zed 在解决技术难题和实现构建革命性 IDE 所需的无限发展路线图之间取得了完美的平衡。他曾是 Superhuman 的联合创始人兼首席技术官,该公司提供全球最快的电子邮件体验。他因打造了使用户收件速度提升一倍的技术和团队而入选《福布斯》30 岁以下精英榜。康拉德是开源的坚定拥护者。他曾为多个项目贡献代码,从 libxml2 到 sqlite,从 git 到 Firefox。他坚信技术社区应该倡导知识共享和协作改进的文化。
观看:https://youtu.be/sheIOOf-xRo
文章《Postfix macros and let-place》
作者:nadrieril
作者在文中探讨了 Rust 社区长期处于停滞状态的“后缀宏”提案,并提出了一种名为 let place 的新机制来解决其核心设计难题。
- 后缀宏的困境:无回溯原则
后缀宏(Postfix Macros)允许像
expr.macro!()这样调用宏。该提案迟迟无法推进的核心原因是 “无回溯原则”(No-backtracking rule):
- 问题:如果宏直接接收
expr的原始 Token(标记),它理论上可以解析并改变expr的含义(例如,根据后面的内容改变前面表达式的语义)。这会破坏 Rust 解析器从左到右、不回溯的特性,给 IDE 和编译器带来巨大压力。 - 例子:在
x.is_some().while! { ... }中,如果while!宏能直接操作x.is_some()的 Token,事情会变得非常复杂且难以预测。
- 核心方案:
let place机制 为了解决上述问题,作者引入了let place这一概念。其核心想法是:“计算一次位置(Place),多次使用。”
- 语法:
let place p = <expr>; - 作用:它将
<expr>评估为一个“位置”(即内存地址/变量路径),而不是将其转换为一个具体的值(不发生 Place-to-Value 强制转换)。 - 别名化:变量
p成了该位置的一个“别名”。这意味着你可以通过p进行读写,而不会触发移动(Move)或拷贝(Copy)。 - 副作用一致性:
<expr>中的任何副作用(如函数调用)只会在let place这一行评估一次。
- 如何通过
let place实现后缀宏 作者提议,后缀宏不应该接收原始 Token,而应该被编译器自动脱糖(Desugar)为使用let place的形式:1. 编译器先将接收者表达式转换为一个let place别名。2. 宏在内部使用这个别名进行操作。
脱糖示例:
// 假设有后缀宏调用
my_expr.my_macro!(args)
// 脱糖为
{
let place receiver = my_expr;
// 宏展开后的代码,内部引用 receiver 别名
my_macro_expansion!(receiver, args)
}
通过这种方式,my_expr 被提前评估,宏无法“回溯”去改变它的 Token 含义,从而保护了解析器的线性一致性。
let place的技术细节与安全性
- 能力限制:
let place别名不能被重新赋值,也不能手动通过drop(p)结束生命周期(因为它只是别名)。 - 借用检查:为了保证安全,编译器会在
let place处插入“伪借用”(Fake borrows)和“伪读取”(Fake reads)。这确保了在别名有效期间,原始位置不会被意外修改或破坏。 - 简洁性:作者发现这种机制在 MIR(中级中间表示)层面的实现非常简单,远比想象中轻量。
- 总结与展望 这篇文章的意义在于为 Rust 的两个难题提供了联动的解决方案:
- 对后缀宏:提供了一种既能保持语法连贯(Piping style),又不破坏编译器原则的方法。
- 对语言底层:
let place本身就是一个有用的特性,它允许开发者以更精细、更安全的方式控制内存位置的别名,而不需要像引用(Reference)那样显式地处理生命周期和借用权限。
作者认为,let place 可能是通往更易用的后缀宏(如 .match!, .if_let!, .unwrap_or!{ continue })的关键拼图。
阅读:https://nadrieril.github.io/blog/2025/12/09/postfix-macros-and-let-place.html
文章《Block Pattern》
作者:John Nunley (notgull)
作者在文中介绍了一种他称之为“块模式”(Block Pattern)的编程手法。
这种模式利用了 Rust 中“一切皆表达式”的特性,通过将逻辑封装在代码块 { ... } 中来提升代码的可读性和健壮性。
- 什么是“块模式”?
在 Rust 中,代码块本身就是一个表达式,可以返回一个值。
let foo = {
let x = 1;
let y = 2;
x + y // 返回 3
};
作者建议将复杂的初始化逻辑或多步骤的操作包裹在这样的块中,而不是散落在函数的主体空间里。
- 块模式的三大优势
- 意图先行(Intent First):
代码以
let variable = { ... }开头,阅读者立刻就能明白接下来的代码块是为了计算这个变量,而不必读完所有细节才明白目的。这降低了阅读长函数时的认知负担。 - 减少命名空间污染(Namespace Pollution): 在计算过程中产生的临时变量(如中间步骤的字符串、索引等)会被限制在块的作用域内。一旦离开代码块,这些变量就会被销毁,主函数的命名空间保持整洁。
- 限制可变性(Restrict Mutability):
这是该模式最强大的地方。你可以在块内部使用
let mut data = ...来进行复杂的原地修改,最后返回一个不可变的值给外部变量。这样就将“可变性”锁在了最小的范围内,防止后续代码意外修改数据。
- 与“重构为函数”的对比 虽然将逻辑提取为独立函数也能实现上述目标,但“块模式”在以下场景更具优势:
- 保持上下文连贯:对于简短且只用一次的逻辑,放在块内可以避免阅读者在不同函数间跳跃,保持思维连贯。
- 无需显式传递参数:块可以直接访问闭包外的变量,而不需要像定义新函数那样显式地声明和传递大量参数。
作者认为“块模式”是一种廉价且高效的架构手段。它不需要复杂的抽象,仅仅通过 Rust 原生的块表达式特性,就能让代码实现“高内聚、低耦合”,是编写健壮 Rust 代码的一项重要技巧。
阅读:https://notgull.net/block-pattern/
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论