本周 Rust 动态 531
2024-01-24
说明: 本周 Rust 动态 531 由 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社区更新
基金会
项目/工具更新
- Ruffle 2023年回顾
- cargo-semver-checks尚未解决的四个挑战
- rustc_codegen_gcc:进展报告#29
- 2024年Xilem后端的路线图
- rust-analyzer更新日志#217
- pq-sys 0.5.0
- SeaORM 0.12.x的新功能
- 2024年1月24日的Espressif芯片上的Rust
观察/想法
- 默认情况下如何减小Rust二进制文件的大小
- 我在Rust中遇到的最佳和最糟糕的死锁
- 为什么SQL恰好挂了940秒? TCP和异步Rust!
- 使异步Rust可靠
- 识别Rust的collect::()内存泄漏陷阱
- [视频] embassy现在在crates.io上
- [视频] Rust的全栈Web框架前景一片光明
- [视频] 哈利法克斯Rust会议 - Rust & Tell #1
- [视频] 为什么Rust将在2024年持续增长
Rust教程
- 使用
mem::take
减少堆分配 - 编写你自己的Rust lint工具
- 在Rust中使用Serde
- 在Rust中解析JSON
- 十亿行挑战:Rust教程
- 在ESP上使用Embassy:定时器
- 在SparkFun expLoRaBLE Thing Plus上支持Rust的LoRa功能
- 如何在Rust中处理!Sized类型
- Rocket - Web应用程序中的日志记录
- Rocket - 在路由中访问自定义配置
- 使用临时文件和环境变量进行测试
研究
本周的 Crate
本周的 crate 是 apistos,一个 OpenAPI 文档工具。
感谢 Romain Lebran 的自荐!
参与征集:项目和演讲者
项目征集
一直想为开源项目贡献力量,但不知道从何开始? 我们会每周挑选一些来自 Rust 社区的任务,供你选择和开始参与!
其中一些任务可能有导师可供咨询,欲了解更多信息请访问任务页面。
- Ockam - 在每个进程中只有单个
SqlxDatabase
实例 - Ockam - 改进数据库迁移,以配对sql和rust迁移代码
- Ockam - 使 install.sh 在升级过程中不会失败
- Hyperswitch - [特性]:使缓存配置能在运行时配置
- Hyperswitch - [特性]:使用 makefile 为本地系统实现代码覆盖率
- Hyperswitch - [特性]:为本地测试和 CI 设置代码覆盖率
- Hyperswitch - [特性]:为客户端密钥添加域类型
- Hyperswitch - [特性]:使 get_required_value 使用 OptionExt 中的 ValidationError
如果你是一个 Rust 项目所有者,正在寻找贡献者,请在此提交任务。
演讲者征集
无论你是新手还是经验丰富的演讲者,寻找一个平台分享一些有趣的内容吗?这个版块会突出正在计划中的活动,并接受提交参加其活动作为演讲者的申请。
如果你是一位活动组织者,希望扩大活动的影响范围,请通过向 TWiR 提交 PR 提交提交链接。
Rust 项目更新
HashMap
/HashSet
:迭代器的fold
方法实现已通过dead_code
将#[repr(transparent)]
视为与#[repr(C)]
相同fix(rust-analyzer)
:使用新的 pkgid 规范来比较large_assignments
:对函数调用中传递的特定大参数进行 Lintmaybe_lint_impl_trait
:将is_downgradable
和is_object_safe
分离never_patterns
:将!
绑定计为发散模式never_patterns
:类型检查永不模式pat_analysis
:不要依赖连续的VariantId
,除非是在 rustc 内部pattern_analysis
:移除Ty: Copy
约束proc_macro
:添加Literal::c_string
构造器single_use_lifetimes
:不建议删除有界限的生命周期- 将
#[track_caller]
添加到 "From implies Into" 实现中 - 添加
Ipv6Addr::is_ipv4_mapped
- 将
PatKind::Err
添加到 AST/HIR - 为
exclusive_range_pattern
错误添加帮助信息 - 添加私有的
NonZero<T>
类型别名 - 添加方法来表明使用check-cfg时不期望有任何值
- 添加了
NonZeroXxx::from_mut(_unchecked)?
- 允许在
thread_local!
中使用任何const
表达式块 - 总是使用RevealAll进行常量评估查询
- 避免在没有
dyn
的情况下使用trait名称造成的内部编译器错误(ICE) - 合并解析内建协程trait实现的逻辑
- 在let-else中禁止带大括号的宏调用
- 更早地检测
NulInCStr
错误 - 改进
let_underscore_lock
- 改善了
collapse_debuginfo
属性,并添加了命令行标志 - 使
unsafe_op_in_unsafe_fn
在 2024 版本中迁移 - 限制对新类型索引的私有字段的访问
- 简化
closure_env_ty
和closure_env_param
- 当遇到
mem::swap
在切片上造成的冲突借用时,建议使用.swap()
- 取消弃用 lint
unstable_features
并在编译器中使用它 - 使 MIR 传递名字成为编译时常量
- 确保
stable_mir::with_tables
的安全性 - SMIR:确保剩余的“私有”字段实际上是私有的
- 在 MIR 跳转线程中使用解释器 (github.com/rust-lang/r…)
- 在 MIR 借用检查中使用隐含边界兼容模式 (github.com/rust-lang/r…)
- 在 MIR 中验证 AggregateKind 类型 (github.com/rust-lang/r…)
- 在 DSE 之间夹杂 MIR 优化 (github.com/rust-lang/r…)
- 无需哈希缓存本地 DefId 键控查询 (github.com/rust-lang/r…)
- 打包 u128 在编译器中以减轻新的对齐 (github.com/rust-lang/r…)
- 对少数几个 map 使用 UnhashMap (github.com/rust-lang/r…)
- 在 GVN 中折叠算术恒等式 (github.com/rust-lang/r…)
- 在常量评估中优化大数组创建 (github.com/rust-lang/r…)
- 在更多适配器上实现迭代器专门化特征 (github.com/rust-lang/r…)
- 优化
EscapeAscii
的 Display 和CStr
的 Debug 显示 - 稳定化
bound_map
- 稳定化
round_ties_even
- 稳定化
slice_first_last_chunk
- 稳定化单字段
offset_of!
- 实现严格整数运算,在溢出时触发 panic
- core: 引入
split_at{,_mut}_checked
- 取消隐藏
iter::repeat_n
- 修复在
(A)Rc::from_box_in
中使用错误分配器进行内存释放的问题 - 在
{slice,Iterator}::is_sorted_by
的比较闭包中使用bool
而不是PartialOrd
作为返回值
- regex:使
Input::new
防止不正确的AsRef
实现 - cargo-rustdoc:在任何地方都使用相同路径输出格式逻辑
- cargo:在JSON消息中使用pkgid规范
- cargo:仅重映射通用前缀
- cargo doc:添加标题,以突出显示“如何找到对依赖启用的特性”
- cargo:为所有种类的运行器从环境中继承作业服务器
- cargo:修正精确的预发布跟踪链接
- cargo:当没有声明功能时,返回传递一个空的
values()
- cargo:改善GitHub Actions CI配置
- rustdoc:允许在标题中使用链接
- rustdoc:调整侧边栏大小时隐藏模态框
- rustfmt:在将一个令牌解析为宏参数之前,检查该令牌是否可以作为非终结符种类开始
- rustfmt:增加配置选项
generated_marker_line_search_limit
- clippy:
blocks_in_conditions
:如果条件来自宏,则不发出警告 - clippy:
default_numeric_fallback
:改进常量上下文检测 - clippy:
no_effect_underscore_binding
:允许使用带下划线前缀的变量 - clippy:
unused_io_amount
捕获Ok(_)
- clippy:添加
suspicious_open_options
语法检查 - clippy:在
trait_duplication_in_bounds
语法检查中正确处理类型关联 - clippy:如果类型有
non_exhaustive
属性,则不发出derive_partial_eq_without_eq
语法检查 - clippy:在同一个 lint 通道中尽早找到函数路径引用
- clippy:修复
semicolon_if_nothing_returned
的假阳性问题 - clippy:修正
multiple_crate_versions
以正确规范化包名,避免忽略本地包 - clippy:修复
no_effect_underscore_binding
的警告范围 - clippy:在
single_call_fn
lint 中尊重#[allow]
属性 - clippy:改进
arc_with_non_send_sync
lint 描述的措辞并修复死链 - rust-analyzer:添加 "One" 导入粒度
- rust-analyzer:添加一个新的配置以允许重命名非本地定义
- rust-analyzer:为显著 trait 指向类型的悬停操作
- rust-analyzer:在悬停字面量时显示额外的值信息
- rust-analyzer:悬停显示显著的已实现特征
- rust-analyzer:为
use_tree_list
解析添加错误恢复 - rust-analyzer:修复从枚举变体提取
struct
时的恐慌错误 - rust-analyzer:修复进度报告卡住不前的问题
- rust-analyzer:在 "Inline call" 中更好地处理
SelfParam
- rust-analyzer:在转换为受保护返回条件时包括
for
构造 - rust-analyzer:当工作区根目录包含符号链接时推断出
OUT_DIR
- rust-analyzer:使
value_ty
查询可失败 - rust-analyzer:将
macro_rules
解析为宏名称
即将举行的活动
2024年1月24日至2024年2月21日期间的Rust活动 🦀
虚拟活动
- 2024-01-24 | 虚拟 (柏林, 德国) | WeAreDevelopers 社区
- 2024-01-25 | 虚拟 (夏洛特斯维尔, 北卡罗来纳州, 美国) | 夏洛特斯维尔 Rust 聚会
- 2024-01-25 | 虚拟 (林茨, 奥地利) | Rust Linz
- 2024-01-25 | 虚拟 (墨西哥城, 联邦区, 墨西哥) | Rust MX
- 2024-01-28 | 虚拟 (弗罗茨瓦夫, 波兰) | Stacja IT 弗罗茨瓦夫
- 2024-01-30 | 虚拟 | Bevy 游戏开发
- 2024-01-30 | 虚拟 (布法罗, 纽约州, 美国) | 布法罗 Rust 用户组
- 2024-01-30 | 虚拟 (达拉斯, 德克萨斯州, 美国) | 达拉斯 Rust
- 2024-01-31 | 虚拟 (加的夫, 英国) | Rust 和 C++ 加的夫
- 2024-02-01 | 虚拟 + 线下 (巴塞罗那, 西班牙) | BcnRust
- 2024-02-01 | 虚拟 (柏林, 德国) | OpenTechSchool 柏林 + Rust 柏林
- 2024-02-03 | 虚拟 + 线下 (布鲁塞尔, 比利时) | FOSDEM 2024
- 2024-02-03 | 虚拟 (坎帕拉, 乌干达) | Rust 圈
- 2024-02-04 | 虚拟 | Rust Maven
- 2024-02-07 | 虚拟 (印第安纳波利斯, 印第安纳州, 美国) | Indy Rust
- 2024-02-08 | 虚拟 (夏洛特斯维尔, 北卡罗来纳州, 美国) | 夏洛特斯维尔 Rust 聚会
- 2024-02-08 | 虚拟 (纽伦堡, 德国) | Rust 纽伦堡
- 2024-02-10 | 虚拟 (弗罗茨瓦夫, 波兰) | Stacja IT 弗罗茨瓦夫
- 2024-02-13 | 虚拟 (达拉斯, 德克萨斯州, 美国) | 达拉斯 Rust
- 2024-02-15 | 虚拟 (柏林, 德国) | OpenTechSchool 柏林 + Rust 柏林
- 2024-02-21 | 虚拟 (温哥华, 不列颠哥伦比亚省, 加拿大) | 温哥华 Rust
欧洲
- 2024-01-24 | 克罗地亚,萨格勒布 | impl Zagreb for Rust
- 2024-01-25 | 德国,奥格斯堡 | Rust Meetup Augsburg
- 2024-01-25 | 奥地利,维也纳 | Rust Vienna
- 2024-02-01 | 混合(西班牙,巴塞罗那) | BcnRust
- 2024-02-03 | 比利时,布鲁塞尔 | FOSDEM '24
- 2024-02-03 | 德国拜仁州纽伦堡 | Paessler Rust Camp 2024
- 2024-02-06 | 德国,不来梅 | Rust Meetup Bremen
- 2024-02-07 | 英国,伦敦 | Rust London User Group
- 2024-02-08 | 瑞士,伯尔尼 | Rust Bern
北美
- 2024-01-24 | 得克萨斯州奥斯汀, 美国 | Rust ATX
- 2024-01-27-28 | 加拿大艾伯塔省卡尔加里 | Rust Calgary
- 2024-01-25 | 加利福尼亚州山景城, 美国 | Mountain View Rust Meetup
- 2024-01-30 | 马萨诸塞州剑桥, 美国 | 波士顿 Rust Meetup
- 2024-02-07 | 马萨诸塞州布鲁克莱恩, 美国 | 波士顿 Rust Meetup
- 2024-02-12 | 明尼苏达州明尼阿波利斯, 美国 | 明尼阿波利斯 Rust Meetup
- 2024-02-13 | 纽约州纽约, 美国 | 纽约市 Rust
- 2024-02-13 | 华盛顿州西雅图, 美国 | 卡皮托尔山 Rust 编码/黑客/学习
- 2024-02-15 | 马萨诸塞州波士顿, 美国 | 波士顿 Rust Meetup
- 2024-02-15 | 华盛顿州西雅图, 美国 | 西雅图 Rust 用户组
大洋洲
- 2024-02-06 | 澳大利亚西澳洲珀斯 | 珀斯Rust聚会小组
如果你正在举办Rust相关活动,请将其添加到日历中,这样我们可以在这里提及它。请记得添加活动的链接。如果需要获取权限,请通过邮件联系[Rust社区团队][community]。
Rust 工作机会:
TWiR(This Week in Rust)已经停止特别推送个别的工作职位。关于这一变化的更多信息,请阅读这里:
请查看最新的 Reddit 上 r/rust 社区的招聘帖。
本周名言
这个语言的函数式 ML 根基一直很明显,Graydon 的第一个 Rust 编译器是用 OCaml 写的,这影响了它的初始设定。
它不是“更好的 C++”。
它是站在 Lisp 肩膀上的 Haskell,穿上 C 的外衣潜入 PRDCTN。(所有流行语言聚集的高端夜店)
– tris 在他的“No Boilerplate” Youtube 频道上说
感谢 PrototypeNM1 的推荐!
《本周在 Rust》由以下人员编辑:nellshamrell、llogiq、cdmistman、ericseppanen、extrawurst、andrewpollack、U007D、kolharsam、joelmarcey、mariannegoldin、bennyvasquez。
邮件列表托管赞助商是 The Rust Foundation