comm: per-line get_flag lookups and allocation in the main loop
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
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
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di uutils/coreutils
-
touch: "setting times of" instead of "cannot touch" for an existing file the user cannot writeForse già presa @danielsyauqi l’ha presa 1 giorno fa. ApertaU - touch
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
touch: `-d now` fails on a writable file owned by someone elseForse già presa @sunsss123soldier l’ha presa 2 giorni fa. ApertaU - touch
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
CI: GNU test tests/id/setgid fails intermittently on unrelated PRsForse già presa @abendrothj l’ha presa 7 giorni fa. ApertaU - id
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
uutils/coreutils#14998 · 8 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
awaiting upstream U - stty
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
B - high priority U - du
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
uutils/coreutils#14984 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di uutils/coreutils
Issue simili
-
mxl-compile: пример заполнения ячеек отклоняется UnicaForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 91/100
IngvarConsulting/unica#1301 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
curator: add tutros/sbxmAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
ajeetraina/awesome-docker-sbx#220 ·
-
`helios / deploy`: switch zone wait in `deploy.sh` has almost no headroom over healthy startup timesForse già presa Una pull request collegata a questa issue è aperta o già unita. ApertaTest Flake
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
oxidecomputer/omicron#11453 ·
I maintainer di solito rispondono entro 1 giorno