2026.03.29

chensy 发布于 2026-03-29 113 次阅读


很久没写了,大约已经可以称为月记了()。上一篇已经是年前的事情了,过年的时候本来多少想写点,无奈确实是没什么感想,同时遇上终末地抽卡破防的事情,干脆就不写了。紫金港已经是春天了,大约也只有每年的花季才会有点春天的感觉。化学实验中心那里原来是油菜花,现在改成一片蓝色的花了,很漂亮。正式的名字似乎是喜林草。一眼看过去就让人觉得和银月之庭里的祈月之花很像,应该就是以此为原型创造的吧。

今天又来写一些废话,主要是做一些 rust 上的技术总结,但由于是杂谈,也就不开新的文章了。过去两个月,把图像分割的程序基本完善了,也对这门语言多了一些感想。但从语言本身来说,个人认为 rust 已经是相当优秀的语言,包括包管理器 cargo、官方的检查器和 linter rust-analyzer 以及语言自身的语法,足以超越 python 和 C++ 一众老东西。特别地,rust 是强类型语言,但是类型推断又做得很好,这使得它一方面能够享受强类型的福利(定义和引用跳转从不出现 undefined 情况、大范围的静态语法检查),又不会由于类型系统带来额外的编码负担。这也使它非常适合 agentic coding,因为 agent 能够非常容易地拿到诊断信息,同时也不用担心像 python 那样的环境混乱的情况。在语言层面上,能够与之相比的可能只有 typescript;因为 typescript 也算是强类型的语言,并且性能比一般的纯解释型语言要好。但是本人向来是痛恨 typescript 的,原因在于 javascript 本身的语法就是依托史;javascript 一方面混合了各种风格的语法,包括但不限于面向对象,闭包甚至函数式,另一方面与最初的 html/DOM 高度耦合,最终使其成为不可名状之物。本人自认为写 js 也写了挺久了,至今仍然不能完全看懂 js 的代码。typescript 是它的超集,并没有从本质上改变这个状况;或者说,即使加入了类型系统,typescript 也不能够从语言设计上保证良好的程序风格,而必须依赖于外部的最佳实践。稍有不慎就会写出史一样的代码,属于人类看一眼就会爆炸的范围。

但 rust 致命的短板在于生态。js/ts 的生态量已经非常恐怖了,python 也是如此;但 rust 的生态还远远不足。这次的图像分割包使用了 pca/umap/kmeans 这样的经典算法,rust 的数值计算生态不说没有,只能说高度混乱。甚至连最底层的 blas/lapack 都还没有好的接口,ndarray 也有版本依赖问题,上升到 scipy 的层面更是群魔乱舞,有弃更的,有 vibe 的(指 scirs2),总之不是很靠得住。对于深度学习或者是更简单一些的图像处理,倒是有更完备的方案。onnxruntime 看着乱,实际上 ort 的支持已经很不错了,过去的两个月已经验证了 windows 上 directml 后端的可移植性,这一点非常方便。webgpu 后端目前有严重的计算精度问题,只能说未来可期。框架方面,burn 的发展正处于如日中天的状态,可能已经不错了,不过目前想不到有什么理由会在 rust 下做训练。

另一方面,我发现很多 rust 的 crate 都不怎么写文档和用例,高度依赖于 docs.rs 这种东西,这非常不好。这也是唯一一点我认为 js 的生态有好处的地方。再加上 rust 库往往都还在 breaking change 的状态,每加一个库都是一种折磨。不过现在 agent 可以比较大地缓解这种状态了。

但很不幸地,我总是要和数值算法打交道。这周还尝试用 rust 实现了一下 umap,评价是连 svd 的生态都没有,那还是别做了。图像分割包中为了打补丁,只能把整个 python 环境 pack 进去了,但这样做毕竟不是很好,因为 python 环境打包实在太大了,有 300-400M 的样子。目前看来,更优的思路是反其道而行之,向下走,因为 C++ 在科学计算这方面反而有更好的生态,并且有 header-only 这样的库来保证一致性。rust 和 C++ 的衔接总是有办法的,原汤化原食嘛。这种思路挺有吸引力的,未来有空的时候往这个方向试试看。

此作者没有提供个人介绍。
最后更新于 2026-03-29