tensor4all 团队把 tenferro-rs 的首批 crate 发到了 crates.io。时间是 2026 年 6 月 23 日,作者是 Hiroshi Shinaoka / tensor4all 团队。
这个项目现在还只是 v0.2 preview,API 没稳定。但它抛出的工程问题很具体:当科学计算代码越写越大,AI coding agent 又开始参与生成大量代码,底座语言到底该优先要“写得顺”,还是要“守得住边界”?
我的判断是,tenferro-rs 不是在宣告 Julia 过时,也不是要替代 PyTorch/JAX。它更像是在补 Rust 科学计算长期缺的一层:可微分张量栈。
tenferro-rs 补的是 Rust 的张量连接层
tenferro-rs 覆盖的面很宽:张量、自动微分、einsum、FFT、线性代数,以及显式 CPU/CUDA 后端。它还保留了实验性的 WebGPU 和 OpenXLA 路径。
自动微分上,它同时提供两类体验。一类接近 PyTorch 的 eager autodiff。另一类接近 JAX 的 traced transforms,包括 grad、vjp、jvp 和 HVP。
这不是简单堆功能。更关键的是它想把 Rust 里分散的科学计算部件接起来。
Rust 生态已有 ndarray、faer、Burn、candle、CubeCL 这类项目。问题是,研究工程团队经常需要的不是单个数组库或单个深度学习框架,而是一套能把张量、求导、后端和扩展操作接在一起的中间层。
| 问题 | 常见路线 | tenferro-rs 的选择 | 对团队的影响 |
|---|---|---|---|
| 自动微分 | Python 里用 PyTorch/JAX | eager 与 traced transforms 并存 | Rust 项目少写跨语言胶水 |
| 后端控制 | 框架替你抽象较多 | CPU/CUDA 显式选择 | 更方便排查数据移动和设备边界 |
| 存储布局 | NumPy 偏行主序,Julia/Fortran 偏列主序 | 列主序 | 迁移 Fortran、Julia、MATLAB、LAPACK 代码更顺 |
| 操作扩展 | 往核心框架里塞逻辑 | 操作族独立 crate | 外部开发者更容易按模块扩展 |
| AD 规则 | 常和具体 tensor 类型绑紧 | 规则不绑定具体 tensor 类型 | 后端和张量实现有替换空间 |
列主序这个点不花哨,但很实用。很多科学计算代码不是从 Web 服务长出来的,而是从 Fortran、MATLAB、Julia、LAPACK 的世界长出来的。存储布局对齐,迁移成本会少一截。
对 Rust 科学计算开发者来说,最直接的动作不是马上押注,而是把它当作候选底座评估:看 crates.io 上的 crate 拆分、API 边界、文档和版本约束,再拿一个小型真实算例接进去。
从 Julia 迁到 Rust,核心不是否定 Julia
原文对 Julia 的态度并不激烈。Julia 适合原型、数学表达和快速迭代,这一点没有被推翻。tensor4all 过去在 IR basis、SparseIR.jl、张量交叉插值和 quantics 栈上的工作,也从 Julia 起步。
变化出现在代码规模变大之后。
研究代码只服务论文时,表达力最重要。代码开始变成长期底座后,问题会变成另一组:运行期才暴露的类型问题、编译和预编译拉长 edit/test 循环、模块边界不够硬、正确性检查跟不上代码膨胀。
AI coding agent 加进来后,这个压力更明显。人类不只是问“能不能快点写出来”,还要问“agent 写出的十几万行代码有没有穿透抽象、有没有绕过规则、能不能被测试框住”。
Rust 的优势就在这里。类型系统、所有权、crate 边界、模块可见性、Cargo 的测试和 benchmark 流程,都在把错误往前拦。它不保证代码一定正确,但能让一批错误在运行前暴露。
对正在从 Julia 或 Python 迁移张量网络、HPC、数值计算栈的团队,我会把选择拆得更具体:
| 团队处境 | 更合理的动作 |
|---|---|
| 主要用户仍在 Python,训练和推理依赖 PyTorch/JAX | 继续用 PyTorch/JAX,tenferro-rs 先观望 |
| Rust 已是主工程语言,只缺可微分张量层 | 拿 tenferro-rs 做局部试点 |
| Julia 代码仍处在原型和论文阶段 | 不急着迁移,先稳定算法和接口 |
| 代码库开始变大,AI 参与开发,边界问题变多 | 评估 Rust 底座的收益,重点看测试和模块拆分 |
这里的重点不是“换语言”。是团队要算一笔账:少一点表达便利,能不能换来更低的长期维护成本。
现在最该看验证,而不是功能清单
tenferro-rs 没有说自己已经取代 PyTorch 或 JAX。原文也说得很清楚:如果宿主语言是 Python,PyTorch 和 JAX 仍是自然选择。
所以,判断 tenferro-rs 不能只看功能列表。真正要看的是它怎么证明自己没算错、怎么证明性能接近主流框架、怎么让外部开发者扩展而不破坏核心设计。
目前它给出的可信度来源有三类。
tensor-ad-oracles:把 derivative correctness 放到独立仓库,用有限差分和 PyTorch reference oracle 做外部校验。tenferro-benchmark:用可复现 benchmark 与 PyTorch、JAX 对比。原文只说很多目标上接近 PyTorch/JAX,具体数字应看仓库结果。- 规则文档与覆盖率检查.用设计规则和检查机制约束 AD 规则、操作扩展和测试覆盖。
我更看重第一点。科学计算库最怕的是“跑得很快,但错得很安静”。外部 correctness oracle 不是装饰,它是在承认:可微分张量栈的信用,不能只靠单元测试和作者信心。
限制也要说清。v0.2 preview 意味着 API 还会变,生态远没到 Python 科学计算那种成熟度。实验性 WebGPU/OpenXLA 路径也不该被理解成稳定后端承诺。
更稳妥的试法,是选一段真实工作负载,而不是跑玩具 demo。比如 shape 会随数据变化的张量网络,自适应 bond dimension,截断阈值,运行期迭代次数不固定的数值流程。这些场景能更快暴露 JAX/XLA 路线不舒服的地方,也能检验 tenferro-rs 的 Rust 边界是否真有价值。
接下来不用看口号,看三件事就够了。
| 观察点 | 说明什么 | 判断条件 |
|---|---|---|
tensor-ad-oracles 覆盖范围 | 求导正确性能否外部验证 | 线性代数、einsum、FFT、复杂张量操作覆盖继续增加 |
tenferro-benchmark 可复现性 | 性能叙事是否站得住 | 不同 CPU/GPU 上结果稳定,数字能复跑 |
| 独立 crate 扩展操作 | 设计边界是否真的松耦合 | 外部操作不必绑定核心 tensor 类型,也不破坏 AD 规则 |
如果这三点站住,tenferro-rs 才有机会从研究工程项目变成 Rust 科学计算的可靠底座。否则,它会停在“思路很好,但迁移风险太高”的位置。
回到开头的问题:AI 写代码越多,科学计算栈越不能只追求写得快。写得快是开局,守得住才是长期成本。
