lansering av pakethanteringssystem , som används i distributionen . Den här tråden sammanfattar det långa arbetet 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 upphörde, var en annan viktig förändring införandet av , vilket gjorde det möjligt att påskynda beräkningar relaterade till att bestämma beroenden med 50-60 %. Intressant nog föreslog vissa utvecklare att skriva om koden för beroendelösning i C/C++ eller Go för att snabba upp det, men vi lyckades lösa det befintliga problemet med liten ansträngning.
Profilering av den befintliga koden visade att den huvudsakliga tiden under beräkningarna gick åt till att anropa funktionerna use_reduce och catpkgsplit med en upprepande uppsättning argument (till exempel anropades funktionen catpkgsplit 1 till 5 miljoner gånger). För att påskynda processen användes cachning av resultaten av dessa funktioner med hjälp av ordböcker. Det optimala sättet att lagra cachen var den inbyggda funktionen lru_cache, men den var bara tillgänglig i Python-versioner från och med 3.2. För kompatibilitet med tidigare versioner lades en stub till för att ersätta lru_cache, men beslutet att sluta stödja Python 2.7 i Portage 3.0 förenklade uppgiften avsevärt och gjorde det möjligt att klara sig utan detta lager.
Genom att använda cachen minskade körningstiden för åtgärden "emerge -uDvpU --with-bdeps=y @world" på en bärbar ThinkPad X220-dator från 5 minuter och 20 sekunder till 3 minuter och 16 sekunder (63 %). Tester på andra system visade en prestandaökning på minst 48 %.
Utvecklaren som förberedde ändringen försökte också implementera en prototyp av koden för beroendelösning i C++ eller Rust, men uppgiften visade sig vara för svår, eftersom den krävde portering av en stor mängd kod, och samtidigt var det tveksamt om resultatet skulle vara värt ansträngningen.
Källa: opennet.ru
