rust-lang/rust-clippy

BufReader Stdin or StdinLock

Open

#6 755 ouverte le 17 févr. 2021

Voir sur GitHub
 (12 commentaires) (2 réactions) (1 assigné)Rust (1 391 forks)batch import
A-lintL-perfT-middlegood first issue

Métriques du dépôt

Stars
 (10 406 stars)
Métriques de merge PR
 (Merge moyen 19j 22h) (113 PRs mergées en 30 j)

Description

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();

Guide contributeur