python / python/cpython

Proposal to add gc_list_for_each macro

Aperta
#133,058 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

interpreter-core pending type-feature
Lingua principale
Python
Stelle
77.2k
Fork
35.9k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Feature or enhancement

Proposal:

In the implementation of the reference cycle garbage collector, gc.c file, I have noticed that we use the following for-loop pattern over and over to traverse a PyGC_Head list:

for (gc = GC_NEXT(list); gc != list; gc = GC_NEXT(gc)) {
  /* ... */
}

However, in pycore_llist.h we avoided that by using llist_for_each macro as:

// Iterate over a list.
#define llist_for_each(node, head) \
    for (node = (head)->next; node != (head); node = node->next)

I propose adding a new macro as gc_list_for_each to the gc_list_xxx family to serve the same purpose:

#define gc_list_for_each(gc, list) \
    for (gc = GC_NEXT((list)); gc != (list); gc = GC_NEXT(gc))
Has this already been discussed elsewhere?

No response given

Links to previous discussion of this feature:

No response

Guida per i contributori

Apri la guida per i contributori

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.

Direzione di ricerca

Inizia esaminando i pattern ripetuti di attraversamento di PyGC_Head in gc.c e la macro llist_for_each esistente in pycore_llist.h. Aggiungi la macro gc_list_for_each proposta alla famiglia gc_list_xxx, quindi verifica che il garbage collector dei cicli di riferimenti continui a essere compilato e che il suo comportamento esistente non sia cambiato.

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

Valutazione

Stack tecnologico
c
Ambito
backend
Tipo di issue
Funzionalità
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.