Oltre alla fine del supporto per Python 2.7, un altro cambiamento importante Γ¨ stata l'inclusione di
La profilazione del codice esistente ha mostrato che la maggior parte del tempo di calcolo Γ¨ stato impiegato chiamando le funzioni use_reduce e catpkgsplit con un insieme ripetuto di argomenti (ad esempio, la funzione catpkgsplit Γ¨ stata chiamata da 1 a 5 milioni di volte). Per velocizzare le cose, Γ¨ stata utilizzata la memorizzazione nella cache dei risultati di queste funzioni utilizzando i dizionari. L'opzione migliore per l'archiviazione della cache era la funzione integrata lru_cache, ma era disponibile solo nelle versioni Python a partire dalla 3.2. Per compatibilitΓ con le versioni precedenti, Γ¨ stato aggiunto uno stub per sostituire lru_cache, ma la decisione di interrompere il supporto per Python 2.7 in Portage 3.0 ha notevolmente semplificato il compito e ha reso possibile fare a meno di questo livello.
L'utilizzo della cache ha ridotto il tempo di esecuzione dell'operazione "emerge -uDvpU βwith-bdeps=y @world" sul laptop ThinkPad X220 da 5 minuti e 20 secondi a 3 minuti e 16 secondi (63%). Test su altri sistemi hanno mostrato un aumento delle prestazioni di almeno il 48%.
Lo sviluppatore che ha preparato la modifica ha anche provato a implementare un prototipo del codice di risoluzione delle dipendenze in C++ o Rust, ma il compito era troppo difficile perchΓ© richiedeva il porting di una grande quantitΓ di codice, ed era dubbio che il risultato valesse lo sforzo .
Fonte: opennet.ru