vydanie systému správy balíkov , používaný v distribúcii Toto vlákno sumarizuje dlhý proces prechodu na Python 3 a ukončenia podpory Pythonu 2.7.
Okrem ukončenia podpory pre Python 2.7 bolo ďalšou dôležitou zmenou zahrnutie , čo nám umožnilo zrýchliť výpočty riešenia závislostí o 50 – 60 %. Je zaujímavé, že niektorí vývojári navrhli prepísať kód na riešenie závislostí v jazyku C/C++ alebo Go, aby sa to zrýchlilo, ale existujúci problém bol vyriešený s minimálnym úsilím.
Profilovanie existujúceho kódu odhalilo, že väčšina výpočtového času sa strávila volaním funkcií use_reduce a catpkgsplit s opakovanou sadou argumentov (napríklad funkcia catpkgsplit bola volaná 1 až 5 miliónov krát). Na zrýchlenie procesu bolo implementované ukladanie výsledkov týchto funkcií do vyrovnávacej pamäte pomocou slovníkov. Vstavaná funkcia lru_cache bola optimálna na ukladanie vyrovnávacej pamäte, ale bola dostupná iba vo vydaniach Pythonu od verzie 3.2. Pre kompatibilitu so staršími verziami bol pridaný stub pre lru_cache, ale rozhodnutie o ukončení podpory Pythonu 2.7 v Portage 3.0 úlohu výrazne zjednodušilo a umožnilo eliminovať túto vrstvu.
Použitie vyrovnávacej pamäte skrátilo čas vykonávania operácie „emerge -uDvpU --with-bdeps=y @world“ na notebooku ThinkPad X220 z 5 minút 20 sekúnd na 3 minúty 16 sekúnd (63 %). Testy na iných systémoch ukázali zvýšenie výkonu najmenej o 48 %.
Vývojár, ktorý zmenu pripravil, sa tiež pokúsil implementovať prototyp kódu na riešenie závislostí v jazyku C++ alebo Ruste, ale úloha sa ukázala ako príliš zložitá, pretože vyžadovala portovanie veľkého množstva kódu a bolo pochybné, či výsledok bude stáť za námahu.
Zdroj: opennet.ru
