lansarea sistemului de management al pachetelor , utilizată în distribuția . Ramura prezentată a rezumat lucrările îndelungate de tranziție la Python 3 și încetarea suportului pentru Python 2.7.
Pe lângă încetarea suportului pentru Python 2.7, o altă modificare importantă a fost includerea , care au permis accelerarea calculului legat de determinarea dependențelor cu 50-60%. Interesant este faptul că unii dezvoltatori au propus să rescrie codul de rezolvare a dependențelor în C/C++ sau Go pentru a-i îmbunătăți performanța, dar s-a reușit rezolvarea problemei cu eforturi minime.
Realizarea profilării codului existent a arătat că cea mai mare parte a timpului în calcule este consumată de apelurile funcțiilor use_reduce și catpkgsplit cu un set repetat de argumente (de exemplu, funcția catpkgsplit a fost apelată între 1 și 5 milioane de ori). Pentru a accelera, s-a aplicat caching-ul rezultatelor acestor funcții utilizând dicționare. Funcția încorporată lru_cache a fost optimă pentru stocarea cache-ului, dar aceasta a fost disponibilă doar în versiunile Python începând cu 3.2. Pentru compatibilitate cu versiunile anterioare, a fost adăugată o mască pentru a înlocui lru_cache, dar decizia de a înceta suportul pentru Python 2.7 în Portage 3.0 a simplificat considerabil sarcina și a permis evitarea acestei straturi intermediare.
Utilizarea cache-ului a redus timpul de execuție al operațiunii „emerge -uDvpU —with-bdeps=y @world” pe laptopul ThinkPad X220 de la 5 minute și 20 de secunde la 3 minute și 16 secunde (63%). Testele pe alte sisteme au arătat un câștig de performanță de cel puțin 48%.
Dezvoltatorul care a pregătit modificarea a încercat, de asemenea, să realizeze un prototip al codului de rezolvare a dependențelor în C++ sau Rust, dar sarcina s-a dovedit a fi prea complicată, deoarece a necesitat portarea unei cantități mari de cod și, în același timp, era îndoielnic că rezultatul obținut ar fi meritat eforturile depuse.
Sursa: opennet.ro
