История изменений
Исправление
RazrFalcon,
(текущая версия)
:
Чем это лучше:
fn main() -> std::io::Result<()> {
let file = std::fs::File::open(std::env::args().nth(1).expect("no input file"))?;
let buf = unsafe { memmap::Mmap::map(&file)? };
let mut lines = 0;
let mut words = 0;
for (i, b) in buf.iter().enumerate() {
if b.is_ascii_whitespace() && !buf.get(i+1).map(|c| c.is_ascii_whitespace()).unwrap_or(false) {
words += 1;
}
if *b == b'\n' {
lines += 1;
}
}
println!(" {} {} {}", lines, words, buf.len());
Ok(())
}
> wc big.txt
128457 1095695 6488666 big.txt
> target/release/wc big.txt
128457 1095695 6488666
> hyperfine 'wc big.txt'
Benchmark #1: wc big.txt
Time (mean ± σ): 26.3 ms ± 0.4 ms [User: 25.6 ms, System: 0.7 ms]
Range (min … max): 25.4 ms … 27.5 ms 111 runs
> hyperfine 'target/release/wc big.txt'
Benchmark #1: target/release/wc big.txt
Time (mean ± σ): 10.9 ms ± 0.3 ms [User: 10.6 ms, System: 0.5 ms]
Range (min … max): 10.3 ms … 12.2 ms 251 runs
> hyperfine './tsar-wc < big.txt'
Benchmark #1: ./tsar-wc < big.txt
Time (mean ± σ): 7.2 ms ± 0.2 ms [User: 5.8 ms, System: 1.7 ms]
Range (min … max): 6.6 ms … 7.5 ms 383 runs
Исходная версия
RazrFalcon,
:
Чем это лучше:
fn main() -> std::io::Result<()> {
let file = std::fs::File::open(std::env::args().nth(1).expect("no input file"))?;
let buf = unsafe { memmap::Mmap::map(&file)? };
let mut lines = 0;
let mut words = 0;
for (i, b) in buf.iter().enumerate() {
if b.is_ascii_whitespace() && !buf.get(i+1).map(|c| c.is_ascii_whitespace()).unwrap_or(false) {
words += 1;
}
if *b == b'\n' {
lines += 1;
}
}
println!(" {} {} {}", lines, words, buf.len());
Ok(())
}
> wc big.txt
128457 1095695 6488666 big.txt
> target/release/wc big.txt
128457 1095695 6488666
> hyperfine 'wc big.txt'
Benchmark #1: wc big.txt
Time (mean ± σ): 26.3 ms ± 0.4 ms [User: 25.6 ms, System: 0.7 ms]
Range (min … max): 25.4 ms … 27.5 ms 111 runs
> hyperfine 'target/release/wc big.txt'
Benchmark #1: target/release/wc big.txt
Time (mean ± σ): 10.9 ms ± 0.3 ms [User: 10.6 ms, System: 0.5 ms]
Range (min … max): 10.3 ms … 12.2 ms 251 runs