Rust重写Coreutils 0.11发布:GNU兼容率冲到95.33%,cp命令直接提速32.93%
技术笔记 1 次阅读

Rust重写Coreutils 0.11发布:GNU兼容率冲到95.33%,cp命令直接提速32.93%

Rust重写Coreutils这事,关注开源圈的朋友应该不陌生。这个叫uutils的项目,目标挺野的——用Rust把Linux里那套最基础的命令行工具整个重写一遍,还想着在Linux、macOS、Windows三个平台通吃。前两天,0.11版本正式发布了,我看了下更新内容,属实有点东西。

Rust重写Coreutils 0.11

兼容率又往上爬了

先说最关键的兼容性。这次通过GNU官方测试套件的项目数量涨到了653项,上一版0.10是645项。失败测试从28项降到了22项,测试套件本身的错误更是从1项直接清零。换算下来,GNU兼容率从94.44%升到了95.33%。

别小看这不到一个百分点的提升,Coreutils这种项目,剩下的每个百分点都是硬骨头。cp、ls、rm这些命令看着简单,真要把GNU的各种奇奇怪怪参数和行为全部对齐,工作量远超想象。

PGO一开,性能最高涨31%

这次更新最让我感兴趣的是性能优化。官方的Linux、macOS和Windows版本,全部启用了配置文件引导优化(PGO)。官方说法是,这项技术可以把性能提升最高31%。

重点优化对象是cp。在某些操作场景下,它把文件打开次数直接缩减到一次,性能提升了32.93%。我平时在服务器上搬文件,cp用得最多,这个优化对我来说是真香。

join命令也有大动作。项目基准测试显示,处理配对输入时速度提升到了原来的1.37倍,而且在特定工作负载下,速度大约是GNU join的2.5倍。这个差距已经不能用"接近"来形容了。

报错信息终于不谜语人了

0.11还引入了一套基于Ariadne的诊断引擎。部分命令出错的时候,不光显示传统错误信息,还会把你输入的参数原样回显出来,然后用插入符号直接标出出错字符的位置。

用过Linux终端的人都知道,传统报错信息有时候真的让人摸不着头脑。现在这种带定位的报错方式,对新手友好太多了,排查问题能省不少时间。

新增的兼容选项

这次还补了几个GNU兼容选项,包括uname -A、uname --all-labeled,以及cut的-F和--whitespace-delimited参数。看起来都是小东西,但对追求脚本跨平台兼容的人来说,每一个都算数。

说点实在的

说实话,Rust重写Coreutils这个项目,早期很多人当它是"玩具"。但现在看,兼容率95%以上、性能反超GNU、三平台通吃,它已经从一个实验项目,慢慢长成了可以认真对待的替代品。

Rust的内存安全特性,天然比C更适合写这种贴近系统的工具。对于跑服务器的运维老哥来说,哪天生产环境换上Rust版Coreutils,我一点都不会意外。毕竟,能少几个segfault,谁不愿意呢?

分享

评论 (0)

评论通过后显示

暂无评论,来写第一条吧 ✍️