utgÄva av paketstyrningssystemet , som anvÀnds i distributionen . Den presenterade grenen sammanfattar ett lÄngvarigt arbete med att övergÄ till Python 3 och avsluta stödet för Python 2.7.
Förutom att stödet för Python 2.7 har avslutats, var en annan viktig förÀndring inkluderingen , vilket möjliggjorde en hastighetsökning pÄ 50-60% i berÀkningarna relaterade till beroendedefinition. Det Àr intressant att vissa utvecklare föreslog att skriva om beroendehanteringskoden i C/C++ eller Go för att snabba upp dess funktion, men det lyckades lösa problemet med mindre anstrÀngning.
Profilering av den befintliga koden visade att den största tiden vid berÀkningarna spenderas pÄ anrop av funktionerna use_reduce och catpkgsplit med upprepade uppsÀttningar av argument (t.ex. funktionen catpkgsplit anropades mellan 1 och 5 miljoner gÄnger). För att öka hastigheten anvÀndes caching av dessa funktionsresultat med hjÀlp av ordböcker. Den inbyggda funktionen lru_cache var optimal för att lagra cache, men den var bara tillgÀnglig i Python-versioner frÄn 3.2 och framÄt. För att vara kompatibel med tidigare versioner lades en ersÀttning för lru_cache till, men beslutet att avsluta stödet för Python 2.7 i Portage 3.0 förenklade uppgiften avsevÀrt och möjliggjorde att undvika detta mellanlager.
AnvĂ€ndningen av cache gjorde att tiden för operationen "emerge -uDvpU âwith-bdeps=y @world" pĂ„ en ThinkPad X220 bĂ€rbar dator minskade frĂ„n 5 minuter 20 sekunder till 3 minuter 16 sekunder (63%). Tester pĂ„ andra system visade en prestandavinst pĂ„ inte mindre Ă€n 48%.
Utvecklaren som förberedde Àndringen försökte ocksÄ implementera en prototyp av beroendehanteringskoden i C++ eller Rust, men uppgiften visade sig vara för komplex, eftersom den krÀvde portering av en stor mÀngd kod, och det var tveksamt om det resulterande resultatet var vÀrt den insats som krÀvdes.
KĂ€lla: opennet.ru
