l'uscita del sistema di gestione dei pacchetti , utilizzato nella distribuzione . Questa versione conclude un lungo lavoro di transizione a Python 3 e la cessazione del supporto per Python 2.7.
Oltre alla cessazione del supporto per Python 2.7, un'altra importante novità è stata l'inclusione di , che hanno consentito di aumentare la velocità dei calcoli relativi alla determinazione delle dipendenze del 50-60%. È interessante notare che alcuni sviluppatori hanno proposto di riscrivere il codice di risoluzione delle dipendenze in C/C++ o Go per accelerare le prestazioni, ma sono riusciti a risolvere il problema in modo relativamente semplice.
La profilazione del codice esistente ha mostrato che il tempo principale durante i calcoli è speso nelle chiamate delle funzioni use_reduce e catpkgsplit con un insieme ripetitivo di argomenti (ad esempio, la funzione catpkgsplit è stata chiamata da 1 a 5 milioni di volte). Per migliorare la velocità, è stata applicata la memorizzazione dei risultati di queste funzioni utilizzando dizionari. La funzione integrata lru_cache si è dimostrata ottimale per la memorizzazione della cache, ma era disponibile solo nelle versioni di Python a partire dalla 3.2. Per garantire la compatibilità con versioni precedenti, è stata aggiunta una sostituzione per lru_cache, ma la decisione di interrompere il supporto per Python 2.7 in Portage 3.0 ha semplificato notevolmente la questione, consentendo di evitare questa interfaccia.
L'uso della cache ha permesso di ridurre il tempo di esecuzione dell'operazione "emerge -uDvpU —with-bdeps=y @world" su un laptop ThinkPad X220 da 5 minuti e 20 secondi a 3 minuti e 16 secondi (63%). I test su altri sistemi hanno mostrato un incremento delle prestazioni non inferiore al 48%.
Lo sviluppatore che ha preparato la modifica ha anche cercato di implementare un prototipo di codice per la risoluzione delle dipendenze in C++ o Rust, ma il compito si è rivelato troppo complesso, poiché richiedeva il porting di un grande volume di codice e, inoltre, era dubbio che il risultato ottenuto valesse gli sforzi impiegati.
Fonte: opennet.ru
