Burn 0.22:改模型后重编译降到 1 秒
Burn 是用于训练和推理的张量库与深度学习框架。0.22.0 把此前积累的 API 改动集中在这一版,用户代码里的模型不再携带 Backend 泛型。
模型从 Model<B: Backend> 改成普通结构体,Tensor<B, 2> 改成 Tensor<2>。执行位置由 Device 选择,例如 Device::cuda(0)、Device::wgpu、Device::flex()。操作路径是 Tensor、Bridge、Dispatch、Backend。Bridge 把具体后端类型挡在应用代码外面,所以改模型时编译器不用再把整条后端依赖链重编一遍。
发布说明给了两份训练项目的 release 重建中位数,各测 3 次。CNN 加或删一层隐藏线性层,从 28.42 秒降到 4.57 秒。Transformer 交替等价的前馈表达式,从 14.73 秒降到 1.00 秒。CNN 配置是两段 64 通道 3×3 卷积、BatchNorm、ReLU 和 2×2 max-pool,接着 1600→128→128→10 的线性层,batch 256。Transformer 是 6 层 pre-norm,隐藏维 512,前馈维 2048,8 个注意力头,序列长度 512。
同一两份项目在 NVIDIA GeForce RTX 4050 Laptop GPU 上用 CUDA、FP32 训练,每版 3 次,50 步预热、500 步测量。CNN 训练步从 38.0 ms 降到 21.1 ms,卷积梯度、转置卷积直接核和 BatchNorm 训练专用算子把训练吞吐提高 80%。Transformer 训练步从 201.0 ms 降到 193.8 ms。预热后 CNN 峰值显存从 956 MiB 降到 486 MiB,Transformer 从 3,486 MiB 降到 2,868 MiB。显存数字不含 CubeCL 启动时探测带宽的临时分配。
ndarray 和 LibTorch 后端已弃用,纯 Rust CPU 改走 Flex,Candle 后端已移除。发布说明还写了 LoRA、QLoRA、ONNX 导出和远程计算。1.0 之前剩下细粒度 profiling、CubeCL 计算环境集成,以及当前 API 的稳定。完整变更在 v0.22.0 release notes。
原文链接:https://tracel.ai/blog/release-0.22.0/
203 个 Rust 职位:Senior 占 58%
这是 getarustjob.com 对近三个月 Rust 职位的手工统计。作者 George 审了 2026 年 7 月以来上架的 203 个职位,来自 166 家公司。薪资用公布区间的中点,按固定汇率换成美元。
级别:Senior 58%,Mid-level 31%,Staff / Principal / Lead 7%,Junior 加 Intern 5%,初级合计 10 个。109 条写了年限的职位里,中位数是 5 年,中间 50% 是 4 到 7 年。作者写道,很少有人直接把初级招进 Rust 岗位,常见路径是先以 C++、Python 或 Go 入职,再转到 Rust 相关团队。
年薪中位数:全部有区间的职位 17.1 万美元,中间 50% 是 13.1 万到 21.0 万,样本 78。美国 19.3 万美元,中间 50% 是 15.8 万到 22.1 万,样本 56。美国 Senior 19.8 万美元,中间 50% 是 17.8 万到 22.8 万,样本 34。美国 Mid-level 16.5 万美元,中间 50% 是 14.7 万到 19.4 万,样本 16。从美国 Mid-level 到 Senior,中位数相差约 3.2 万美元。英国 14.6 万美元,样本 7。欧洲整体 12.7 万美元,样本 17。美国职位公布薪资区间的比例是 61%,欧洲是 26%。
美国远程中位数 18.9 万美元,样本 18。美国混合或现场中位数 19.3 万美元,样本 41。允许远程的职位占 37%,另外 63% 是混合或现场。地区占比:美国 45%,英国 12%,德国 7%,加拿大 5%,欧洲整体出现在约 36% 的职位里。
职位描述里提到的语言:C++ 35%,Python 30%,C 20%,Go 18%,TypeScript 14%。标题里出现 Rust 的占 63%。技术关键词:分布式系统 32%,Linux 28%,Kubernetes 20%,AWS 17%,Tokio / async 15%,gRPC / tonic 9%,WASM 4%,axum 4%,actix 3%。行业关键词:加密 / 区块链 / Web3 38%,数据库 / 数据基础设施 29%,交易 / 低延迟 28%,AI / ML 基础设施 26%,机器人 / 自动驾驶 / 汽车 21%,国防 / 航空航天 16%。11% 要求安全许可或美国公民身份,几乎都在国防方向。26% 提到股权,19% 提到开源,3% 提到签证担保。一条职位可以同时计入多个行业或技术关键词。
原文链接:https://www.reddit.com/r/rust/comments/1wz0rov/i_analyzed_200_rust_job_postings_from_the_last_3/
gccrs 编译 core 从 42 分钟降到 3 分钟
gccrs 是 GCC 的 Rust 前端,目标是编译 Linux 内核里的 Rust 代码。LWN 记录了 Pierre-Emmanuel Patry 和 Arthur Cohen 在 RustConf 2026 的演讲,以及 Patry 次周在 Kangrejos 的跟进。文章作者是 Daroc Alden,日期是 2026-09-22。
Cohen 说演讲标题目前不成立:gccrs 还不能编译 Linux 内核。两人曾被裁,后来 Open Source Security 接手了他们的合同。Patry 在 Kangrejos 说,眼下先要发出可以测试的二进制,他称之为先“误编译”。内核 Rust 代码分成 core、stdarch、alloc、pin_init 等 crate。core 提供语言功能所需的最小集合,例如 for 循环用的 Iterator。
名字解析和宏展开要交错做到定点。Cohen 最初向负责人估计这项工作要三周,实际在 RustConf 前才完成,接近三年。声明宏展开已经能工作。core 大约 8.5 万行。给重复的名字解析调用加缓存后,gccrs 编译 core 从大约 42 分钟降到 3 分钟,rustc 是 30 秒。内联汇编和 lang items 大体可用。crate metadata 目前序列化的是语法树,跨 crate 链接还要改。
Drop 由 GSoC 参与者 Janet Chien 实现。她开始时 gccrs 没有 drop;现在常见情况已支持,非线性控制流、部分移动、泛型和临时值仍会出错。Enes Çevik 在补 alloc 的编译和测试基础设施。内核本身不链接标准库,但有两个 crate 使用过程宏,过程宏可以链接标准库,所以 gccrs 仍要能构建标准库。项目目前对齐 rustc 1.49 和对应的旧内核。语言层面还要处理 trait upcasting、新的 use<...> 语法,以及 trait 里的返回位置 impl Trait。内核生成 C/Rust 绑定时用的 cfi_encoding 需要改 GCC 的 CFI 代码,相关补丁系列从 2025 年提出后尚未合入。
原文链接:https://lwn.net/Articles/1095553/
eros:用类型元组组合错误
eros 是一个 Rust 错误处理库,用类型元组表示函数可能返回的错误集合。作者 Dillon McMahon,文章日期 2026-10-06,仓库是 mcmah309/eros。
读端口的例子写成 eros::Result<u16, (io::Error, ParseIntError)>。eros::Result<T, E> 是 Result<T, ErrorUnion<E>> 的别名。元组列出可能的错误类型,里面只存放其中一个。.union() 把普通 Result 的错误放进 ErrorUnion,目标集合从返回类型推断。签名里去掉 io::Error 后,文件读取不再能通过编译。
.widen() 把较小的错误集合扩成包含它的集合。load_host 和 load_port 都能返回 io::Error 时,组合后的集合里只列一次。.recover::<io::Error, _>() 处理指定错误并把它移出集合。端口文件读失败时改用 8080,返回类型就剩 (ParseIntError,)。全部错误都处理后,集合变成 (),.into_value() 才能取出值。不写元组时,错误集合默认是 AnyError,精确结果可以用 ? 传进这个形式。
#[context("Load server port from {}", path)] 给错误附上操作和路径。文章里的例子在解析失败时打印原始错误,再按从内到外列出 Load server port from config/port.txt、Configure server、Start application。作者此前用 error_set 试过精确错误集合。文末对比了 Zig:Zig 用 || 合并 error set,错误码不带数据;eros 的元组可以带上具体错误类型。
原文链接:https://mcmah309.github.io/posts/the-missing-piece-in-rust-error-handling/
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论