Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

comm: per-line get_flag lookups and allocation in the main loop

Aperta Adatta ai principianti
#15,046 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Refactoring
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
rust
Ambito
cli, performance

Direzione di ricerca

Inizia da src/uu/comm/src/comm.rs, concentrandoti sul ciclo principale intorno alle righe 227, 242 e 258 e su OrderChecker::verify_order intorno alle righe 134, 139 e 153. Esegui il benchmark fornito di seq e comm con e senza --nocheck-order, quindi esegui i test esistenti. Il lavoro è completato quando le ricerche e l’allocazione per riga sono ridotte, mentre l’output rimane identico a livello di byte e le prestazioni migliorano.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

U - comm

In comm, the main loop calls opts.get_flag(options::COLUMN_1/2/3) on every line (lines 227, 242 and 258 of src/uu/comm/src/comm.rs) which is a clap lookup by string.
OrderChecker::verify_order also does self.last_line = current_line.to_vec() on every line (lines 134, 139 and 153), so each line allocates.

Setup: Debian 13, aarch64 (Docker VM), LC_ALL=C, release build of main at 070d78da1 (LTO off), GNU coreutils 9.7.

How to reproduce:

seq -f 'k%08.0f' 1 2 2000000 > ca
seq -f 'k%08.0f' 1 3 3000000 > cb
LC_ALL=C comm -123 ca cb

Time, median of 9 runs:

GNU 9.7 main patched
comm ca cb > file 101 ms 197 ms 117 ms
comm -123 ca cb 67 ms 159 ms 85 ms
comm --nocheck-order -123 ca cb 60 ms 99 ms 67 ms

With --nocheck-order the order checker never runs so only the flag lookups differ. The number of write calls is identical before & after, so the output side is not the cause.

My patch hoists the three flags out of the loop and reuses the buffer (clear() + extend_from_slice). It's 25 lines, byte-identical to GNU's output and the existing tests pass.

For transparency, I noticed this issue thanks to an LLM.

Lingua principale
Rust
Stelle
24.2k
Fork
2.1k
Merge medio
1g 11h
PR unite (30g)
321

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di uutils/coreutils

Tutte le issue di uutils/coreutils

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.