LINUX.ORG.RU

История изменений

Исправление 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