Outre la fin du support de Python 2.7, un autre changement important a été l'inclusion de
Le profilage du code existant a montré que la majeure partie du temps de calcul était consacrée à l'appel des fonctions use_reduce et catpkgsplit avec un ensemble d'arguments répétitifs (par exemple, la fonction catpkgsplit était appelée 1 à 5 millions de fois). Pour accélérer les choses, une mise en cache des résultats de ces fonctions à l'aide de dictionnaires a été utilisée. La meilleure option pour le stockage du cache était la fonction lru_cache intégrée, mais elle n'était disponible que dans les versions Python commençant par 3.2. Pour des raisons de compatibilité avec les versions antérieures, un stub a été ajouté pour remplacer lru_cache, mais la décision d'arrêter le support de Python 2.7 dans Portage 3.0 a grandement simplifié la tâche et a permis de se passer de cette couche.
L'utilisation du cache a réduit le temps d'exécution de l'opération « emerge -uDvpU —with-bdeps=y @world » sur l'ordinateur portable ThinkPad X220 de 5 minutes 20 secondes à 3 minutes 16 secondes (63 %). Les tests sur d'autres systèmes ont montré une augmentation des performances d'au moins 48 %.
Le développeur qui a préparé le changement a également essayé d'implémenter un prototype du code de résolution des dépendances en C++ ou Rust, mais la tâche était trop difficile car elle nécessitait le portage d'une grande quantité de code, et il était douteux que le résultat en vaille la peine. .
Source: opennet.ru