< 返回版块

苦瓜小仔 发表于 2025-12-22 19:33

Tags:日报

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 驱动的大规模系统重构”时代的到来。

  1. 重大战略转向:Galen Hunt 宣布微软正在发起一项大规模倡议,旨在利用人工智能(AI)辅助编码技术,将其庞大的 legacy(遗留)C/C++ 代码库迁移到 Rust
  2. AI 的角色:文章强调,手动将数千万行 C/C++ 代码重写为 Rust 在工程量上是不可行的。微软现在正利用大语言模型(LLMs)和专门的 AI 工具(来自 CoreAI 团队)来自动化这一过程,包括处理内存所有权转换、借用检查等 Rust 的复杂特性。
  3. 系统安全与可靠性:这一举动的根本目的是彻底解决内存安全问题。作为微软系统的功勋专家,Hunt 指出,利用 AI 克服 Rust 学习曲线和重写成本,是实现“安全系统”愿景的必经之路。
  4. Galen Hunt 的角色变化:他本人已从 Azure Sphere 团队转向微软的 CoreAI 团队。他现在的研究重心是“将 LLM 应用于解决系统软件中的长期挑战”,而代码迁移正是这一方向的首个重大应用。
  5. 行业影响:这一消息在 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 的新机制来解决其核心设计难题。

  1. 后缀宏的困境:无回溯原则 后缀宏(Postfix Macros)允许像 expr.macro!() 这样调用宏。该提案迟迟无法推进的核心原因是 “无回溯原则”(No-backtracking rule)
  • 问题:如果宏直接接收 expr 的原始 Token(标记),它理论上可以解析并改变 expr 的含义(例如,根据后面的内容改变前面表达式的语义)。这会破坏 Rust 解析器从左到右、不回溯的特性,给 IDE 和编译器带来巨大压力。
  • 例子:在 x.is_some().while! { ... } 中,如果 while! 宏能直接操作 x.is_some() 的 Token,事情会变得非常复杂且难以预测。
  1. 核心方案:let place 机制 为了解决上述问题,作者引入了 let place 这一概念。其核心想法是:“计算一次位置(Place),多次使用。”
  • 语法let place p = <expr>;
  • 作用:它将 <expr> 评估为一个“位置”(即内存地址/变量路径),而不是将其转换为一个具体的值(不发生 Place-to-Value 强制转换)。
  • 别名化:变量 p 成了该位置的一个“别名”。这意味着你可以通过 p 进行读写,而不会触发移动(Move)或拷贝(Copy)。
  • 副作用一致性<expr> 中的任何副作用(如函数调用)只会在 let place 这一行评估一次。
  1. 如何通过 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 含义,从而保护了解析器的线性一致性。

  1. let place 的技术细节与安全性
  • 能力限制let place 别名不能被重新赋值,也不能手动通过 drop(p) 结束生命周期(因为它只是别名)。
  • 借用检查:为了保证安全,编译器会在 let place 处插入“伪借用”(Fake borrows)和“伪读取”(Fake reads)。这确保了在别名有效期间,原始位置不会被意外修改或破坏。
  • 简洁性:作者发现这种机制在 MIR(中级中间表示)层面的实现非常简单,远比想象中轻量。
  1. 总结与展望 这篇文章的意义在于为 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 中“一切皆表达式”的特性,通过将逻辑封装在代码块 { ... } 中来提升代码的可读性和健壮性。

  1. 什么是“块模式”?

在 Rust 中,代码块本身就是一个表达式,可以返回一个值。

let foo = {
    let x = 1;
    let y = 2;
    x + y // 返回 3
};

作者建议将复杂的初始化逻辑或多步骤的操作包裹在这样的块中,而不是散落在函数的主体空间里。

  1. 块模式的三大优势
  • 意图先行(Intent First): 代码以 let variable = { ... } 开头,阅读者立刻就能明白接下来的代码块是为了计算这个变量,而不必读完所有细节才明白目的。这降低了阅读长函数时的认知负担。
  • 减少命名空间污染(Namespace Pollution): 在计算过程中产生的临时变量(如中间步骤的字符串、索引等)会被限制在块的作用域内。一旦离开代码块,这些变量就会被销毁,主函数的命名空间保持整洁。
  • 限制可变性(Restrict Mutability): 这是该模式最强大的地方。你可以在块内部使用 let mut data = ... 来进行复杂的原地修改,最后返回一个不可变的值给外部变量。这样就将“可变性”锁在了最小的范围内,防止后续代码意外修改数据。
  1. 与“重构为函数”的对比 虽然将逻辑提取为独立函数也能实现上述目标,但“块模式”在以下场景更具优势:
  • 保持上下文连贯:对于简短且只用一次的逻辑,放在块内可以避免阅读者在不同函数间跳跃,保持思维连贯。
  • 无需显式传递参数:块可以直接访问闭包外的变量,而不需要像定义新函数那样显式地声明和传递大量参数。

作者认为“块模式”是一种廉价且高效的架构手段。它不需要复杂的抽象,仅仅通过 Rust 原生的块表达式特性,就能让代码实现“高内聚、低耦合”,是编写健壮 Rust 代码的一项重要技巧。

阅读:https://notgull.net/block-pattern/

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页