vydání systému správy balíčků , používaného v distribuci . Předložená větev shrnula dlouhou práci na přechodu na Python 3 a ukončení podpory Python 2.7.
Kromě ukončení podpory Python 2.7 bylo dalším důležitým změnou zahrnutí , které umožnily zrychlit výpočty spojené s určením závislostí o 50-60%. Zajímavé je, že někteří vývojáři navrhovali přepsat kód pro vyřízení závislostí v C/C++ nebo Go za účelem zrychlení jeho činnosti, ale podařilo se vyřešit přetrvávající problém s minimálními změnami.
Profilování existujícího kódu ukázalo, že většina času při výpočtech je strávena voláním funkcí use_reduce a catpkgsplit s opakujícím se souborem argumentů (například funkce catpkgsplit byla volána 1 až 5 milionůkrát). Pro zrychlení bylo aplikováno cachování výsledků těchto funkcí pomocí slovníků. Optimální pro uchovávání cache byla vestavěná funkce lru_cache, ale ta byla dostupná pouze od verzí Pythonu 3.2. Pro zajištění kompatibility s dřívějšími verzemi byla přidána zástupná funkce, která nahrazovala lru_cache, avšak rozhodnutí o ukončení podpory Python 2.7 v Portage 3.0 značně zjednodušilo úkol a umožnilo se vyhnout této mezivrstvě.
Použití cache umožnilo snížit dobu provádění operace „emerge -uDvpU —with-bdeps=y @world“ na notebooku ThinkPad X220 z 5 minut 20 sekund na 3 minuty 16 sekund (63%). Testy na jiných systémech ukázaly nárůst výkonu alespoň o 48%.
Vývojář, který připravil změnu, se také pokusil implementovat prototyp kódu pro vyřízení závislostí v C++ nebo Rust, ale úkol se ukázal jako příliš složitý, jelikož vyžadoval portování velkého objemu kódu a bylo pochybné, zda by získaný výsledek stál za vynaložené úsilí.
Zdroj: opennet.ru
