3 个版本
0.1.2 | 2019 年 10 月 11 日 |
---|---|
0.1.1 | 2019 年 10 月 11 日 |
0.1.0 | 2019 年 10 月 11 日 |
#2347 在 命令行工具
11KB
130 行
wc-rs
用 Rust 重新编写的经典 Unix 工具。
为什么用 Rust 来编写?
我想学习 Rust,这似乎是一个足够小且简单的项目来开始。令我惊讶的是,这个简单的实现比原始的 C 实现 wc
快,看看一些 数字。这是我第一个 Rust 项目,所以它可能包含一些不好的代码,如果发现有改进空间,请提出问题。
安装
- 使用 cargo run 下载和安装
cargo install wc-rs
- 从源码构建
git clone https://github.com/palash25/wc-rs.git cd wc-rs/ cargo build --release
用法
与每个 Linux 发行版中提供的标准 wc
命令相同。
$ wc-rs --help
USAGE:
wc-rs [FLAGS] [FILE]...
FLAGS:
-m, --chars prints the character counts
-h, --help Prints help information
-l, --lines prints the newline counts
-V, --version Prints version information
-w, --words print the words counts
ARGS:
<FILE>... file path(s) to run wc-rs on
统计数据
使用 3 个文件进行测试,每个文件有 48K 行
时间测试
$ \time wc-rs small-file-*
48414 81402 556859 small-file-1
48414 81402 556859 small-file-2
48414 81402 556859 small-file-3
145242 244206 1670577 total
real 0:00.05 user 0.05 sys 0.00
$ \time ./target/release/wc-rs small-file-*
48414 81402 556859 small-file-1
48414 81402 556859 small-file-2
48414 81402 556859 small-file-3
145242 244206 1670577 total
real 0:00.02 user 0.00 sys 0.01
PV 测试
$ wc-rs small-file-* | pv
48414 81402 556859 small-file-1
48414 81402 556859 small-file-2
48414 81402 556859 small-file-3
145242 244206 1670577 total
159 B 0:00:00 [ 3.1KiB/s] [ <=> ]
$ ./target/release/wc-rs small-file-* | pv
48414 81402 556859 small-file-1
48414 81402 556859 small-file-2
48414 81402 556859 small-file-3
145242 244206 1670577 total
186 B 0:00:00 [9.57KiB/s] [ <=> ]
使用 2 个文件进行测试,每个文件有 200 万行
时间测试
$ \time wc-rs big-file-*
2091965 3549748 24604624 big-file-1
2091965 3549748 24604624 big-file-2
4183930 7099496 49209248 total
real 0:01.14 user 1.11 sys 0.02
$ \time ./target/release/wc-rs big-file-*
2091965 3549748 24604624 big-file-1
2091965 3549748 24604624 big-file-2
4183930 7099496 49209248 total
real 0:00.49 user 0.36 sys 0.12
PV 测试
$ wc-rs big-file-* | pv
2091965 3549748 24604624 big-file-1
2091965 3549748 24604624 big-file-2
4183930 7099496 49209248 total
121 B 0:00:01 [ 101 B/s] [ <=> ]
$ ./target/release/wc-rs big-file-* | pv
2091965 3549748 24604624 big-file-1
2091965 3549748 24604624 big-file-2
4183930 7099496 49209248 total
148 B 0:00:00 [ 315 B/s] [ <=> ]
使用 2 个文件进行测试,每个文件有 1000 万行
时间测试
$ \time wc-rs bigger-file-*
10048406 17328448 124739305 bigger-file-1
10446226 18017383 129746037 bigger-file-2
20494632 35345831 254485342 total
real 0:05.73 user 5.66 sys 0.05
$ \time ./target/release/wc-rs bigger-file-*
10048406 17328448 124739305 bigger-file-1
10446226 18017383 129746037 bigger-file-2
20494632 35345831 254485342 total
real 0:02.20 user 1.64 sys 0.55
PV 测试
wc-rs big-file-* | pv
10048406 17328448 124739305 bigger-file-1
10446226 18017383 129746037 bigger-file-2
20494632 35345831 254485342 total
130 B 0:00:05 [22.5 B/s] [ <=> ]
./target/release/wc-rs bigger-file-* | pv
10048406 17328448 124739305 bigger-file-1
10446226 18017383 129746037 bigger-file-2
20494632 35345831 254485342 total
157 B 0:00:02 [69.5 B/s] [ <=> ]
使用更密集的 1000 万行文件进行测试
这里的速度开始稍微慢一些。这个文件比之前的文件多一倍的字节数量和几乎一倍的大小 (~250MB)
时间测试
$ \time -p wc-rs big-and-chonky.txt
10048951 31711680 274285495 big-and-chonky.txt
real 4.72 user 4.67 sys 0.04
$ \time -p ./target/release/wc-rs big-and-chonky.txt
10048951 31711680 274285495 big-and-chonky.txt
real 1.89 user 1.36 sys 0.53
PV 测试
$ wc-rs big-and-chonky.txt | pv
10048951 31711680 274285495 big-and-chonky.txt
46 B 0:00:04 [9.81 B/s] [ <=> ]
$ ./target/release/wc-rs big-and-chonky.txt | pv
10048951 31711680 274285495 big-and-chonky.txt
55 B 0:00:01 [29.2 B/s] [ <=> ]
待办事项
- 如果没有提供文件路径,则读取 stdin
- 添加行长度标志 L
- 添加字节标志 c
依赖关系
~0.7–1MB