van de release van het pakketbeheersysteem , gebruikt in de distributie . Deze tak heeft de lange transitie naar Python 3 samengevat en de ondersteuning voor Python 2.7 stopgezet.
Naast de stopzetting van de ondersteuning voor Python 2.7, was een andere belangrijke verandering de opname van , die een versnelling van 50-60% mogelijk maakten bij berekeningen met betrekking tot afhankelijkheidsbepaling. Het is interessant dat sommige ontwikkelaars hebben voorgesteld om de afhankelijkheidsresolutiecode in C/C++ of Go te herschrijven voor snelheidswinst, maar het probleem kon eenvoudig worden opgelost.
Profilering van de bestaande code toonde aan dat de meeste tijd tijdens berekeningen werd besteed aan het aanroepen van de functies use_reduce en catpkgsplit met een herhaaldelijke set argumenten (bijvoorbeeld, de functie catpkgsplit werd 1 tot 5 miljoen keer aangeroepen). Om de uitvoering te versnellen, werd caching van de resultaten van deze functies toegepast met behulp van dictionaries. De ingebouwde functie lru_cache was het optimale voor het opslaan van de cache, maar deze was slechts beschikbaar in Python-releases vanaf 3.2. Voor compatibiliteit met eerdere versies werd een stub toegevoegd die lru_cache verving, maar de beslissing om de ondersteuning voor Python 2.7 in Portage 3.0 te beƫindigen vereenvoudigde de taak aanzienlijk en maakte deze tussenlaag overbodig.
Het gebruik van de cache heeft de uitvoeringstijd van de operatie āemerge -uDvpU āwith-bdeps=y @worldā op de ThinkPad X220 laptop van 5 minuten 20 seconden naar 3 minuten 16 seconden (63%) verminderd. Tests op andere systemen toonden een prestatieverbetering van minimaal 48%.
De ontwikkelaar die de wijziging voorbereidde, probeerde ook een prototype van de afhankelijkheidsresolutiecode in C++ of Rust te implementeren, maar de taak bleek te complex, aangezien het porteren van een grote hoeveelheid code vereiste, en het was twijfelachtig of het resultaat de inspanning waard zou zijn.
Bron: opennet.ru
