a csomagkezelő rendszer kiadása , amely a disztribúcióban alkalmazásra került . A bemutatott ág összegzi a Python 3-ra való áttérés hosszú munkáját, és megszünteti a Python 2.7 támogatását.
A Python 2.7 támogatásának megszüntetése mellett egy másik fontos változás a következő optimalizációk , amelyek 50-60%-kal gyorsabbá tették a függőségek meghatározásával kapcsolatos számításokat. Érdekes, hogy egyes fejlesztők azt javasolták, hogy a függőségfeloldó kódot C/C++ vagy Go nyelven írják át a teljesítmény javítása érdekében, de a problémát viszonylag egyszerűen sikerült megoldani.
A meglévő kód profilozása azt mutatta, hogy a számítások során a legnagyobb időt a use_reduce és catpkgsplit függvények hívása tölti el, ismétlődő argumentumkészlettel (például a catpkgsplit függvényt 1-5 milliószor hívták meg). A gyorsítás érdekében a funkciók eredményeinek caching-jét alkalmazták szótárak használatával. Az lru_cache beépített funkció volt a legoptimálisabb a cache tárolásához, de ez csak a Python 3.2 verziótól volt elérhető. A korábbi verziók kompatibilitása érdekében egy helyettesítő került hozzáadásra, amely helyettesítette az lru_cache-t, de a Python 2.7 Portage 3.0-ban való támogatásának megszüntetése jelentősen leegyszerűsítette a feladatot, lehetővé téve a réteg nélküli megoldást.
A cache használatával a "emerge -uDvpU —with-bdeps=y @world" művelet futási ideje a ThinkPad X220 laptopon 5 perc 20 másodpercről 3 perc 16 másodpercre (63%) csökkent. Más rendszereken végzett tesztek legalább 48%-os teljesítménynövekedést mutattak.
A változtatást előkészítő fejlesztő egy prototípus kódot is próbált megvalósítani a függőségfeloldásra C++ vagy Rust nyelven, de a feladat túl bonyolultnak bizonyult, mivel nagy mennyiségű kód átkonvertálását igényelte, és kétséges volt, hogy az eredmény megérte volna a ráfordított időt és energiát.
Forrás: opennet.ru
