rust-lang/rust-clippy

BufReader Stdin or StdinLock

Open

#6755 aperta il 17 feb 2021

Vedi su GitHub
 (12 commenti) (2 reazioni) (1 assegnatario)Rust (1391 fork)batch import
A-lintL-perfT-middlegood first issue

Metriche repository

Star
 (10.406 star)
Metriche merge PR
 (Merge medio 19g 22h) (113 PR mergiate in 30 g)

Descrizione

What it does

Suggest using StdinLock rather than BufReader::new(io::stdin()) since it is already buffered. We might also want to take care of let stdin = io::stdin(); BufReader::new(stdin) and also BufReader::new(stdinlock) (there could be people doing this).

Categories (optional)

  • Kind: perf

Locking stdin also provide benefit for not having to re-lock it on every read.

std::io::stdin() already is buffered. Re-buffering it only increase the memcpy calls.

Source https://users.rust-lang.org/t/correct-way-for-taking-large-input-from-keyboard/55304/11 Related to https://github.com/rust-lang/rust-clippy/issues/1805

For example:

  • Recommend locking of stdin to reduce re-locking
  • Suggest not re-buffering stdin lock which already implements BufRead

Drawbacks

None.

Example

let reader = BufReader::new(io::stdin());  // this could a separate variable or StdinLock

Could be written as:

let stdin = io::stdin();
let reader = stdin.lock();

Guida contributor