udgivelse af pakkehåndteringssystemet , der anvendes i distributionen . Den præsenterede version opsummerer langvarigt arbejde med overgangen til Python 3 og ophør af support for Python 2.7.
Ud over ophøret af support for Python 2.7 var en anden vigtig ændring inkluderet , der har gjort det muligt at fremskynde beregninger relateret til afhængighedsbestemmelse med 50-60%. Det er interessant, at nogle udviklere foreslog at skrive koden til afhængighedsopløsning om til C/C++ eller Go for at øge hastigheden, men det lykkedes at løse det eksisterende problem med minimal indsats.
Profileringen af den eksisterende kode viste, at det meste af tiden under beregningerne blev brugt på at kalde funktionerne use_reduce og catpkgsplit med et gentaget sæt af argumenter (for eksempel blev funktionen catpkgsplit kaldt mellem 1 og 5 millioner gange). For at accelerere blev der anvendt caching af resultatet fra disse funktioner ved hjælp af ordbøger. Den indbyggede funktion lru_cache viste sig at være optimal til at gemme cachen, men den var kun tilgængelig i Python-versioner fra 3.2 og frem. For at sikre kompatibilitet med ældre versioner blev der tilføjet en stub, der erstattede lru_cache, men beslutningen om at ophøre med støtte for Python 2.7 i Portage 3.0 gjorde opgaven meget enklere og gjorde det muligt at undgå dette lag.
Brugen af cache gjorde det muligt at reducere udførelsestiden for operationen «emerge -uDvpU —with-bdeps=y @world» på en ThinkPad X220 bærbar fra 5 minutter 20 sekunder til 3 minutter 16 sekunder (63%). Test på andre systemer viste en stigning i ydeevnen på mindst 48%.
Udvikleren, der forberedte ændringen, forsøgte også at implementere et prototype af kodningen til afhængighedsopløsning i C++ eller Rust, men opgaven viste sig at være for kompleks, da det krævede portering af en stor mængde kode, og det var tvivlsomt, om det opnåede resultat var værd at den tid, der blev brugt.
Kilde: opennet.ru
