本周 Rust 动态 534
2024-02-14
说明: 本周 Rust 动态 534 由 ChatGPT(gpt-4-1106-preview) 翻译。
大家好,欢迎阅读本周的《This Week in Rust》!
Rust 是一种编程语言,它赋予每个人构建可靠且高效软件的能力。 这是其进展和社区的每周总结。 想要在这里提及什么内容吗?在Twitter上标记我们 @ThisWeekInRust,或在mastodon.social上标记我们 @ThisWeekinRust,或发送我们一个拉取请求(pull request)。 想要参与进来吗?我们热爱贡献者。
This Week in Rust 在GitHub上公开开发,存档可以在this-week-in-rust.org查看。 如果您发现本周问题中有任何错误,请提交一个PR。
Rust 社区更新
官方
项目/工具更新
- 发布 zbus 4.0 版本。zbus 是一个纯 Rust 的 D-Bus crate。新版本带来了更符合人体工程学的和更安全的 API。发布: zbus4
- Rust OSDev 本月动态:2024 年 1 月
- Rerun 0.13 - 实时 kHz 时间序列在一个多模态可视化工具中
- egui 0.26 - 在标签中选择文本
- Hello, Selium!又一个流媒体平台,但用起来更简单
观察/想法
- 你的函数是哪种红色?
- 将 libyaml 移植到安全的 Rust:一些思考
- 用编译时引用稳定性设计安全的集合 API
- 将 Rust 跨平台编译到 win32
- 模块化:Mojo 与 Rust:Mojo 是否比 Rust 更快?
- 扩展 Rust 的效应(Effect)系统
- 无分配解码:使用特征(traits)和高阶特征界限(high-ranked trait bounds)
- 跨平台编译你的 Rust 项目
- Kind:我们的 Rust 库提供零成本、类型安全的标识符
- 性能轮盘:代码对齐的运气
- 对 C++ 来说太危险了
- 用 Rust 构建一个正常运行时间监控器
- 在奥林匹克运动会上的箱形图
- Rust 在生产中:FOSSA 的访谈
- 异步函数指针性能陷阱(以及为什么它可能不重要)
- Rust 中的错误管理,以及支持它的库
- 完成 Turborepo 从 Go 到 Rust 的迁移
- Rust:一行一行地读取文件,同时注意 RAM 使用
- 为什么选择 Rust?它是安全的选择
- [视频] Rust 1.76.0:24 分钟内的 73 个亮点!
Rust 教程
- Rust/C++ 互操作第 1 部分 - 只介绍基础
- Rust/C++ 互操作第 2 部分 - CMake
- 使用 Rayon 和 Rust 加速数据分析
- 从 Go 调用 Rust FFI 库
- 用 Rust 编写一个简单的 TCP 聊天服务器
- [视频] 在 Rust 编写的 GraphQL API 中使用 Google Oauth - 第 1 部分。注册变更。
杂项
- 书籍《Rust 中的异步编程》发布
- 2024 年 1 月 Rust 工作报告
- 在 SAT 求解器中追踪一个 bug
- 给硬件供应商的 Rust
- [音频] 使用 Rust 保护你的音频代码,采访 Chase Kanipe
- [音频] Tweede Golf - Rust 在生产中播客
- [视频] RustConf 2023
- [视频] 清理 tracing crate
本周的 Crate
本周的 crate 是 microflow,一个为嵌入式系统设计的健壮且高效的 TinyML 推理引擎。
感谢 matteocarnelos 自荐!
参与征集:项目和演讲者
项目征集 - CFP
一直想为开源项目做贡献,但不知道从何开始?
每周我们都会从Rust社区中挑选一些任务给你,你可以选择之后开始行动!
这些任务中的一些可能还有导师可供咨询,请访问任务页面了解更多信息。
- Hyperswitch - [特性]:为本地测试和持续集成(CI)设置代码覆盖率
- Hyperswitch - [特性]:让get_required_value使用ValidationError in OptionExt
如果您是Rust项目的拥有者,并且正在寻找贡献者,请在这里提交任务。
演讲者征集 - CFP
您是一位新手或经验丰富的演讲者,并且正在寻找一个分享酷事物的地方吗?本节重点介绍正在规划的活动,并且接受提交请求,以便加入他们的活动作为演讲者。
- Devoxx PL 2024 | CFP 结束日期 2024-03-01 | 克拉科夫, 波兰 | 活动日期:2024-06-19 至 2024-06-21
- RustFest 苏黎世 2024 CFP 结束日期 2024-03-31 | 苏黎世, 瑞士 | 活动日期:2024-06-19 至 2024-06-24
如果您是活动组织者,并希望扩大活动影响力,请通过向TWiR提交PR来提交链接。
Rust 项目更新
- 为 Cortex-R52 添加 armv8r-none-eabihf 目标支持
- 增加 lahfsahf 和 prfchw 目标特性支持
check_consts
:修复重复的错误,使重要性保持一致interpret/write_discriminant
:在编码具有缝隙的变体时,确保存储的值匹配large_assignments
:允许将数据移动进函数pattern_analysis
:收集与位置相关的信息pattern_analysis
:无需内部可变性也能追踪有效性- 在建议中考虑非重叠的未满足trait界限
- 在建议中考虑无界限类型参数接收者
- 在使用 build-std 时添加对自定义 JSON 目标的支持
- 为
rustc
添加不稳定的-Z direct-access-external-data
命令行标志 - 在
#[allow_internal_unstable(min_specialization)]
下允许受限的 trait 实现 - 始终检查
pthread_mutex_lock
的结果 - 避免在无效的 drop 实现情况下的 drop递归检查中出现内部编译错误(ICE)
- 避免在空操作中集合和迭代
- 在
coherent_trait
的快乐路径中避免访问HIR - 在遇到错误类型时,立即停止析构函数的详细处理
- 为异步闭包构建Debug信息
- 检查我们正在内联的实例的ABI是否正确
- 使用正确的param-env清理内联的类型别名
- 即使之前有错误,也继续进行借用检查
- 覆盖率:将计数器增量站点从BCB节点/边缘计数器中分离出来
- 为ThinBox创建
try_new
函数 - 在
try_instance_mir
中去重tcx.instance_mir(instance)
调用
-
在新求解器中规范化 NLL 类型的生命周期义务(github.com/rust-lang/r…
-
仅在 CI 中打印图像输入文件和校验和(github.com/rust-lang/r…
-
打印协程闭包的类型(github.com/rust-lang/r…
-
在没有
else
的if
表达式中正确处理async
块和async fn
(github.com/rust-lang/r… -
在无效的平等性边界中提供更多建议(github.com/rust-lang/r…
-
在协程泛型中记录协程类型(github.com/rust-lang/r…
-
移除一些
unchecked_claim_error_was_emitted
调用(github.com/rust-lang/r… -
resolve: 在冻结 cstore 之前卸载推测性解析的 crate(github.com/rust-lang/r…
-
重新工作支持异步闭包;允许它们返回从闭包的捕获中借用的 futures(github.com/rust-lang/r…
-
static mut
:允许可变引用到任意类型,而不仅仅是切片和数组(github.com/rust-lang/r…
- 在引用转换为更大内存布局时发出警告
- 不稳定地允许常量引用静态变量并从不可变静态变量中读取
- 在所有平台上使用相同的载mir-opt祝福目标
- 默认启用MIR JumpThreading
- 修复在其他错误存在时mir通道出现内部编译错误的问题
- miri: 修复在外部静态变量上进行符号对齐检查时遇到的内部编译错误
- miri: 实现
mmap64
外部项 - 防止运行一些已在映射中的代码
- 如果一个trait没有实现,它的本地实现是显然协调的
- 使用
ensure
来确保查询的结果,不需要超出其Result
类型
- 为 UEFI 实现 SystemTime
- 为 UEFI 实现 sys/thread
- core/time:避免
Duration::new
中的除法运算 - core:添加 Duration 构造函数
- 使
NonZero
构造器泛型化 - 将
Add
运算符重新定义为常量函数 - 用自定义实现替换 pthread 的
RwLock
- SIMD 内置函数:添加
simd_shuffle_generic
和其他缺失的内置函数 - cargo:测试支持:移除针对
$message_type
的特殊情况 - cargo:如果在 Cargo.toml 中不存在现有的工作空间,不要将新包添加到 workspace.members
- cargo: 为2024版启用版本迁移功能
- cargo: 新功能:为添加成员到工作空间提供提示
- cargo: 修复对于稀疏索引替换来源的混淆错误信息
- cargo: 修复:编辑TOML时不要重复评论
- cargo: 放宽测试以允许同时发出警告
- rustdoc: 在源代码页面中为非本地项目正确生成路径
- bindgen: 为
riscv64imac
和riscv32imafc
添加目标映射 - bindgen: 新功能:添加
headers
选项 - clippy:
mem_replace_with_default
现在不会在未使用的表达式上触发 - clippy:
similar_names
:如果首字符不同则不会触发
- clippy:
to_string_trait_impl
:如果实现是一种特殊化,避免触发 lint - clippy:
unconditional_recursion
:通过Ty
s 比较而不是 DefId`s - clippy:不允许衍生宏消除
disallowed_macros
的警告 - clippy:在测试代码中不检查
incompatible_msrv
- clippy:扩展
NONMINIMAL_BOOL
lint - clippy:修复
Lint Configuration
中的失效 URL - clippy:修复
redundant_type_annotations
lint 中的误报 - clippy:为
unnecessary_fallible_conversions
添加自动修复功能 - clippy:修复一个错误,当数组索引超过 usize 时会导致 ICE
- clippy:重构
implied_bounds_in_impls
lint
- clippy:在
walk_to_expr_usage
中返回Some
的更多情况 - clippy:停止对带有怪异属性宏案例的
match
中的blocks_in_conditions
进行lint(静态代码分析检查) - rust-analyzer:更广泛地抽象 ItemTreeLoc 类似的结构
- rust-analyzer:对于尚未构建的过程宏,提供更好的错误信息
- rust-analyzer:添加“不必要的else”诊断和修复
- rust-analyzer:添加 break 和 return 后缀关键字自动补全
- rust-analyzer:添加诊断以及修复,用
<val>
替换末尾的return <val>;
- rust-analyzer:为trait及其关联项添加不正确的案例诊断
- rust-analyzer:允许 cargo check 仅在当前包上运行
- rust-analyzer:在自动补全列表中首先建议构造函数以及类构造器方法
- rust-analyzer: 改善对被忽略的 proc 宏的支持
- rust-analyzer: 对 rust-analyzer 引入术语搜索功能
- rust-analyzer: 创建
UnindexedProject
通知,用以发送给客户端 - rust-analyzer: 在自定义检查命令中替换
$saved_file
- rust-analyzer: 修复因宏定义扩展(由 MBE 宏产生)导致的函数错误内联问题
- rust-analyzer: 跟踪问题
waker_getters
,从 87021 到 96992 - rust-analyzer: 修复宏转录器发出不正确的生命周期标记
- rust-analyzer: 修复目标布局获取问题
- rust-analyzer: 修复元组结构体中字段的可见性没有渲染显示的问题
- rust-analyzer: 高亮显示 Rust 文档注释
- rust-analyzer: 在内建派生中保留 where 子句
- rust-analyzer: 在调用表达式中缺失参数时进行恢复
- rust-analyzer: 在生成 getter 助手中移除不必要的
.as_ref()
- rust-analyzer: 在 proc-macro-srv 的
FreeFunctions::literal_from_str
中验证字面量 - rust-analyzer: 为 proc macro 服务器实现
literal_from_str
- rust-analyzer: 为实现了
std::ops::Try
的类型的let
语句实现转换到受保护的返回助手
即将到来的活动
2024年2月14日至2024年3月13日之间的Rust活动 💕 🦀 💕
虚拟活动
- 2024-02-15 | 虚拟 (柏林, 德国) | OpenTechSchool 柏林 + Rust 柏林
- 2024-02-15 | 虚拟 + 现场 (布拉格, 捷克) | Rust 捷克共和国
- 2024-02-19 | 虚拟 (墨尔本, VIC, 澳大利亚)| Rust 墨尔本
- 2024-02-20 | 虚拟 (墨尔本, VIC, 澳大利亚) | Rust墨尔本
- 2024-02-20 | 虚拟 (华盛顿, DC, 美国) | Rust DC
- 2024-02-20 | 虚拟 | 午餐 Rust
- 2024-02-21 | 虚拟 (加的夫, 英国) | Rust 和 C++ 加的夫
- 2024-02-21 | 虚拟 (温哥华, BC, 加拿大) | 温哥华 Rust
- 2024-02-22 | 虚拟 (夏洛茨维尔, NC, 美国) | 夏洛茨维尔 Rust 聚会
- 2024-02-27 | 虚拟 (达拉斯, TX, 美国) | 达拉斯 Rust
- 2024-02-29 | 虚拟 (柏林, 德国) | OpenTechSchool 柏林 + Rust 柏林
- 2024-02-29 | 虚拟 (夏洛茨维尔, NC, 美国) | 夏洛茨维尔 Rust 聚会
- 2024-03-06 | 虚拟 (印第安纳波利斯, IN, 美国) | Indy Rust
- 2024-03-07 | 虚拟 (夏洛茨维尔, NC, 美国) | 夏洛茨维尔 Rust 聚会
- 2024-03-12 | 虚拟 (达拉斯, TX, 美国) | 达拉斯 Rust
- 2024-03-12 | 混合 (虚拟 + 现场) 慕尼黑, DE | Rust 慕尼黑
亚洲
欧洲
- 2024-02-15 | 哥本哈根, DK | 哥本哈根 Rust 社区
- 2024-02-15 | 布拉格, CZ - 虚拟+线下 | 捷克共和国 Rust
- 2024-02-21 | 里昂, FR | 里昂 Rust
- 2024-02-22 | 奥胡斯, DK | 奥胡斯 Rust
- 2024-02-29 | 柏林, DE | 柏林 Rust
- 2024-03-12 | 慕尼黑, DE + 虚拟 | 慕尼黑 Rust
北美地区
- 2024-02-15 | 美国马萨诸塞州波士顿 | 波士顿 Rust 聚会
- 2024-02-15 | 美国华盛顿州西雅图 | 西雅图 Rust 用户组
- 2024-02-20 | 美国纽约州纽约市 | Rust 纽约
- 2024-02-20 | 美国加利福尼亚州旧金山 | 旧金山 Rust 学习小组
- 2024-02-21 | 美国马萨诸塞州波士顿 | 波士顿 Rust 聚会
- 2024-02-22 | 美国加利福尼亚州芒廷维尤 | 芒廷维尤 Rust 聚会
- 2024-02-28 | 美国德克萨斯州奥斯汀 | Rust ATX
- 2024-03-07 | 美国加利福尼亚州芒廷维尤 | 芒廷维尤 Rust 聚会
大洋洲
- 2024-02-19 | 墨尔本, 维多利亚州, 澳大利亚 + 虚拟 | Rust Melbourne
- 2024-02-20 | 墨尔本, 维多利亚州, 澳大利亚 + 虚拟 | Rust Melbourne
- 2024-02-27 | 堪培拉, 澳大利亚首都领地, 澳大利亚 | Canberra Rust 用户组
- 2024-02-27 | 悉尼, 新南威尔士州, 澳大利亚 | Rust Sydney
- 2024-03-05 | 奥克兰, 新西兰 | Rust AKL
如果您正在举办Rust活动,请将其添加到日历中,以便在此处提及。记得添加活动链接。邮箱联络Rust社区团队获取权限。
工作机会
请查看最新的 r/rust 上的 Who's Hiring 讨论串以获取信息。
本周名言
出于某种奇怪的原因,Elixir Discord社区缺少穿着程序员袜子的酷儿毛皮迷们,至少与Rust相比,甚至与我看过的大多数其他技术 Discord 服务器相比也是如此。它引起了一些奇怪的认知失调。为什么我在网上和所有这些友善、知识渊博、友好和富有同情心的技术大佬们一起闲逛时会觉得隐约有些不自在?然后我看到一个我在别处认识的名字,我的潜意识里就想“哦,谢天谢地,我知道她实际上在业余时间确实是一只雪豹。”好吧,这个挑剔明确是半开玩笑的,但Rust用户群体继续是一个有趣的案例研究,当你非常明确地表示做一个怪人是可以的时,你可以聚集多少个怪人在一起。
感谢 Brian Kung 的建议!
《Rust 本周》由以下编辑:nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, andrewpollack, U007D, kolharsam, joelmarcey, mariannegoldin, bennyvasquez.
邮件列表托管赞助商是 The Rust Foundation