本周 Rust 动态 535
2024-02-21
说明: 本周 Rust 动态 535 由 ChatGPT(gpt-4-1106-preview) 翻译。
你好,欢迎阅读这周的 Rust 的另一期内容! Rust 是一种编程语言,它使每个人都能构建可靠和高效的软件。 这是对其进展和社区的每周总结。 想要在这里提及某些内容?可以在 Twitter 上通过 @ThisWeekInRust 标签我们,或在 Mastodon 社交网站上通过 @ThisWeekinRust 标签我们,或者发送一个 pull request。 想要参与进来?我们热爱贡献。
这周的 Rust 是在 GitHub 上公开开发的,存档可以在 this-week-in-rust.org 上查看。 如果您发现本周的问题有任何错误,请提交 PR。
Rust 社区更新内容
官方公告
基金会
项目/工具更新
- Bevy 0.13
- Bevy XPBD 0.4: 与碰撞器无关,层次重构,并支持 Bevy 0.13
- uv: 在 Rust 中打包 Python
- git-cliff: 2.0.0 版本新特性 (高度可定制的变更日志生成器)
- rustc_codegen_gcc: 进展报告 #30
- RustRover 2023 四季度功能更新回顾
- rust-analyzer 更新日志 #221
- 宣布 Stabby 3.0
- argmin_testfunctions 0.2.0: Rust 和 Python 中的优化问题测试函数
- 发布 vscode-rustup:以 VSCode 扩展的形式与 rustup 交互
- OpenPGP-card-tools 0.10.0 发布。该项目提供了
oct
命令行工具,用于检查、配置和使用 OpenPGP 卡设备,例如 Nitrokey 或 Yubikey。 - Timeplus Proton SQL Streaming 的 Rust 客户端
观察/想法
- FuturesUnordered 和 future 的执行顺序
- Rust 工具:8 个能提升你生产力的工具
- 记录我对 unsafe 的心得模型
- Rust 在 TechEmpower Web 框架基准测试中怎么能这么快?
Rust 教程
- 从 1s 到 4ms
- 将 OpenStreetMap 数据转换为 HTML5 Canvas,使用 Rust 和 WebAssembly
- macros_rule!
- 在 Rust 中实施 JWT 身份验证
- 使用 Lambda Web Adapter 将 Axum 部署到 Lambda 和 ECS
- Rust/C++ 互操作第 3 部分 - Cxx
- [FR] Rust 中的闭包
- [视频] Safe Rust 不安全!?(cve-rs)
杂项
本周的 Crate
本周的 crate 是 kind,它是一款用于类型化 UUID 的辅助工具库。
感谢 Denys Séguret 的自荐!
测试呼吁
对于 RFC 的实现来说,一个重要的步骤是让人们尝试实现并提供反馈,特别是在稳定化之前。下列 RFC 在向前发展之前将从用户测试中受益:
如果你是特性的实现者,并且希望你的 RFC 出现在上面的列表中,请在你的 RFC 中加上新的 call-for-testing
标签,并附上提供测试指令和/或指导需要测试特性方面的评论。
参与号召;项目和演讲者
项目征集 - CFP
一直想要为开源项目做贡献却不知道从何下手吗? 我们每周都会从Rust社区突出一些任务,你可以选择一个开始着手!
其中一些任务可能还提供导师支持,更多信息请访问任务页面。
- Ockam - 为Linux命令帮助输出中的围栏代码块添加语法高亮
- Ockam - 如果初始化失败,则关闭Worker/Processor
- Ockam - 改进ockam项目票据的输出,信息更加透明
- Hyperswitch - [功能]:为纠纷列表添加
offset
字段 - Hyperswitch - [功能]:为授权列表添加
offset
字段 - Hyperswitch - [功能]:为客户列表添加分页支持
如果您是Rust项目的所有者并且正在寻找贡献者,请在这里提交任务。
演讲者征集 - CFP
你是一位新手或有经验的演讲者,寻找分享一些酷东西的地方吗?本节重点介绍正在计划中并正在接受提案加入其活动的演讲者的事件。
如果您是活动组织者,希望扩大活动的影响范围,请通过向TWiR提交PR来提交提交网站的链接。
Rust 项目更新
上个星期合并了508个拉取请求
- 如果启用了avx512,则隐式启用evex512
const_mut_refs
:允许静态物的可变指针macro_rules
:在全局边表中保留所有元变量跨度- 添加用于获取外部条目的API
- 添加
rust.frame-pointers
配置选项。 - 在 HIR 分析期间为
unnamed_fields
增加更多的检查。 - 允许 AST 和 HIR 访问器返回
ControlFlow
。 - 允许在 const 值中使用可变引用,当它们指向没有内存时。
- 即使先前发生了错误,也始终评估自由常量和静态变量。
- 避免在诊断中出现内部编译错误(ICE)。
- 当没有为对象安全性检查
dyn
建议时,减少错误提示的信心度。 - 在 mir 类型检查中检查规范化调用签名的完整性。
- 在 dyn 上转型时,综合考虑主要 trait 引用的自动 trait 超类。
- 在
check_mod_type_wf
出错后继续编译。 - 即使固有实现检查失败也继续编译
- 继续报告剩余的错误,而不是默默地丢弃它们
- 检测当对参数的方法调用移除后是否能满足未成功的特质限制
- 修复了递归检测产生的内部编译错误(ICE)
- 在尝试确定原始类型的大小时忽略不定尺寸类型
- 使
ConstPropLint
检查在升级过的代码上运行 - 改善
async Fn
特质种类错误的提示信息 - 正确处理作为实现自我类型的弱别名类型
- 将
ConstPropLint
重命名为KnownPanicsLint
- 在元数据中存储静态初始化器,而不是在静态的 MIR 中 以下是一系列 Rust 语言的 GitHub 提交的概述和翻译:
- 当在
impl IntoIterator
上调用Iterator
方法时,建议使用into_iter()
方法。链接:github.com/rust-lang/r… unsafe_code
的检测警告现在会在调用global_asm
时触发。链接:github.com/rust-lang/r…- 在下一个特征解算器一致性中使用履行(fulfillment)。链接:github.com/rust-lang/r…
- miri:实现 x86 AVX 内部函数。链接:github.com/rust-lang/m…
- 优化
delayed_bug
处理方法。链接:github.com/rust-lang/r… - 当标准库(std)使用 panic=abort 编译时,优化掉毒害防护(poison guards)。链接:github.com/rust-lang/r…
- 大修
Diagnostic
和DiagnosticBuilder
。链接:github.com/rust-lang/r… - 为 UEFI 实现
Instant
结构体。链接:github.com/rust-lang/r… - 为
AsciiChar
类型实现Default
特质。链接:github.com/rust-lang/r… - 将
core::str::CharSearcher::utf8_size
存储为 u8 类型。链接:github.com/rust-lang/r…
上述改动都是 Rust 语言和相关工具链的开发活动中的一部分,包含了新功能的实现、性能优化以及代码的改进。这些改动对于 Rust 社区的成员和使用者来说都具有一定的意义。
- 使
File::read_to_end
更少特殊化 (Rust PR #120538) - 泛型实现
NonZero
特征 (Rust PR #121241) - 使
NonZero::get
方法泛型化 (Rust PR #120563) - 使
io::BorrowedCursor::advance
方法安全 (Rust PR #120741) - 使
is_nonoverlapping
属性 #[inline] (Rust PR #121311) - 针对只有一个内部元素的迭代器专门化扁平化 (Rust PR #121204)
- 专门化
io::Chain
的某些方法 (Rust PR #105917) - 重命名
MaybeUninit::write_slice
(Rust PR #116385) - 在
vec::IntoIter
中不再使用mem::zeroed
(Rust PR #120952) - 针对(半)开放范围优化
VecDeque::drain
(Rust PR #118264) - 修复 BTreeMap 的
Cursor::remove_{next,prev}
- 将
Future
和IntoFuture
添加到 2024 版的预导入(prelude)列表中 - hashbrown: 对
HashTable
进行内联调整 - hashbrown: 使
HashSet::insert
返回 OccupiedEntry - codegen_gcc: 正确处理
--use-system-gcc
参数 - codegen_gcc: 实现虚拟的 emit=llvm-ir
- codegen_gcc: 使用默认的 Rust 名字修饰(mangling)
- codegen_cranelift: 在大端系统上修复
simd_select_bitmask
- codegen_cranelift: 在大端系统上修复下载的哈希校验
- cargo add: 确保用户知道正在创建新的功能特性
- cargo add:删除不一致的句号
- cargo test:建议使用
--
来指定 libtest 参数 - cargo:生成 lockfile 时应尊重
rust-version
- rustdoc:在移动端上正确处理长的 crate 名称
- rustdoc:交叉 crate 重导出:即使存在早绑定参数,也能按源顺序正确渲染后绑定参数
- rustdoc:修复
doc_auto_cfg
功能对于 glob 重导出中的 cfg 属性的处理 - rustfmt:修复试图格式化非规范化 UTF8 时的错误
- 在 rustfmt 中格式化
async
trait 边界 - 将 clippy 添加进已知的
cfg
列表 - clippy:增加新的 lint
deprecated_clippy_cfg_attr
- clippy:
case_sensitive_file_extension_comparisons
:在仅包含数字的扩展名上不触发 - clippy:
implied_bounds_in_impls
:避免在重叠的关联类型上进行lint检查 - clippy:
incompatible_msrv
:允许来自语法糖处理的表达式 - clippy:
new_without_default
:现在在const函数上也会触发 - clippy:允许在
redundant_guards
中使用负数字面量 - clippy:在
min_ident_chars
中检查trait项 - clippy:默认测试输出冲突处理为错误
- clippy:确保ASM语法仅在x86架构上检测
global_asm!
和asm!
- clippy:在lint
match_same_arms
中增加检查相同的守卫 - clippy:使得
#[allow]
在pub_underscore_fields
的字段上有效 - clippy: 忽略
min_ident_chars
中导入项的检查 - rust-analyzer: 在顶层的
Cargo.toml
和rust-project.json
文件中激活 - rust-analyzer: 当一些引用出现在宏扩展中时,进行去重
- rust-analyzer: 在重命名导入时创建别名
- rust-analyzer: 添加非穷尽性let声明的诊断
- rust-analyzer: 添加未解决的标识符诊断
- rust-analyzer: 在VSCode中为补全支持多个插入点
- rust-analyzer: 为
become
表达式/尾部调用添加基本支持 - rust-analyzer: 在
{
前不添加`` - rust-analyzer: 对于
{unknown}
到非{unknown}
的类型不匹配,不显示不匹配类型 - rust-analyzer:修复了对尾随项声明的“无谓返回”诊断
- rust-analyzer:修复了在某些情况下构建脚本未能重新构建的问题
- rust-analyzer:修复了对“不必要的 else”诊断的误报
- rust-analyzer:修复了代码片段放置在它们应该在的位置左侧的问题
- rust-analyzer:改进在记录字段初始化器和模式上使用
=
时的恢复 - rust-analyzer:仅在
impl .. for
中完成特性 - rust-analyzer:在多编辑助手中正确放置代码片段
- rust-analyzer:服务器在构建脚本任务上挂起
即将到来的活动
2024 年 2 月 21 日至 2024 年 3 月 20 日之间的 Rusty 活动 🦀
虚拟活动
- 2024-02-21 | 虚拟 (卡迪夫, 英国) | 卡迪夫 Rust 和 C++
- 2024-02-21 | 虚拟 (温哥华, 英属哥伦比亚, 加拿大) | 温哥华 Rust
- 2024-02-22 | 虚拟 (夏洛特维尔, 北卡罗来纳州, 美国) | 夏洛特维尔 Rust 聚会
- 2024-02-27 | 虚拟 (达拉斯, 得克萨斯州, 美国) | 达拉斯 Rust
- 2024-02-29 | 虚拟 (柏林, 德国) | OpenTechSchool 柏林 + 柏林 Rust
- 2024-02-29 | 虚拟 (夏洛特维尔, 北卡罗来纳州, 美国) | 夏洛特维尔 Rust 聚会
- 2024-03-06 | 虚拟 (印第安纳波利斯, 印第安纳州, 美国) | Indy Rust
- 2024-03-07 | 虚拟 (夏洛特维尔, 北卡罗来纳州, 美国) | 夏洛特维尔 Rust 聚会
- 2024-03-12 | 虚拟 (达拉斯, 得克萨斯州, 美国) | 达拉斯 Rust
- 2024-03-12 | 混合(虚拟 + 现场)慕尼黑, 德国 | 慕尼黑 Rust
- 2024-03-14 | 虚拟 (柏林, 德国) | OpenTechSchool 柏林
- 2024-03-21 | 西雅图, 华盛顿州, 美国 | 西雅图 Rust 用户群
- 2024-03-26 | 线上 + 现场 (巴塞罗那, 西班牙) | BcnRust
欧洲
- 2024-02-21 | 法国里昂 | Rust Lyon
- 2024-02-22 | 丹麦奥胡斯 | Rust Aarhus
- 2024-02-29 | 德国柏林 | Rust Berlin
- 2024-03-12 | 德国慕尼黑 + 虚拟会议 | Rust Munich
- 2024-03-19 | 丹麦奥胡斯 | Rust Aarhus
- 2024-03-20 | 西班牙赫罗纳 | Rust Girona
- 2024-03-26 | 西班牙巴塞罗那 + 虚拟会议 | BcnRust
- 2024-03-26, 2024-03-28 | 英国伦敦 | Rust Nation UK
北美洲
- 2024-02-21 | 美国马萨诸塞州波士顿 | 波士顿Rust聚会
- 2024-02-22 | 美国加州山景城 | 山景城Rust聚会
- 2024-02-28 | 美国德州奥斯汀 | Rust ATX
- 2024-03-07 | 美国加州山景城 | 山景城Rust聚会
大洋洲
- 2024-02-27 | 澳大利亚首都领地堪培拉 | 堪培拉Rust用户组
- 2024-02-27 | 澳大利亚新南威尔士州悉尼 | 悉尼Rust用户组
- 2024-02-29 | 澳大利亚昆士兰州布里斯班 | 布里斯班Rust用户组
- 2024-03-05 | 新西兰奥克兰 | 奥克兰Rust用户组
如果你正在举办一个Rust活动,请将活动添加到日历中,以便在此提及。请记住添加活动链接。 有关获取权限事宜,邮件联系Rust社区团队。
招聘信息
请查看 r/rust subreddit 上最新的《谁在招人》讨论串来找到工作机会。
本周名言
可变共享状态是罪恶的,你可以通过禁止修改或者禁止共享来解决这个问题。Rust两种都支持。
感谢 Aleksey Kladov 的建议!
本周 Rust 由以下编辑:nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, andrewpollack, U007D, kolharsam, joelmarcey, mariannegoldin, bennyvasquez.
邮件列表托管由 The Rust Foundation 赞助