Naast het einde van de ondersteuning voor Python 2.7 was een andere belangrijke verandering de opname van
Uit het profileren van de bestaande code bleek dat het grootste deel van de rekentijd werd besteed aan het aanroepen van de functies use_reduce en catpkgsplit met een herhalende reeks argumenten (de functie catpkgsplit werd bijvoorbeeld 1 tot 5 miljoen keer aangeroepen). Om de zaken te versnellen, werd gebruik gemaakt van het cachen van de resultaten van deze functies met behulp van woordenboeken. De beste optie voor cacheopslag was de ingebouwde lru_cache-functie, maar deze was alleen beschikbaar in Python-releases vanaf 3.2. Voor compatibiliteit met eerdere versies werd een stub toegevoegd om lru_cache te vervangen, maar de beslissing om de ondersteuning voor Python 2.7 in Portage 3.0 stop te zetten, vereenvoudigde de taak aanzienlijk en maakte het mogelijk om zonder deze laag te doen.
Het gebruik van de cache verminderde de uitvoeringstijd van de bewerking βemerge -uDvpU βwith-bdeps=y @worldβ op de ThinkPad X220-laptop van 5 minuten 20 seconden naar 3 minuten 16 seconden (63%). Tests op andere systemen lieten een prestatieverbetering zien van minimaal 48%.
De ontwikkelaar die de wijziging heeft voorbereid, probeerde ook een prototype van de afhankelijkheidsresolutiecode in C++ of Rust te implementeren, maar de taak was te moeilijk omdat er een grote hoeveelheid code voor nodig was, en het was twijfelachtig of het resultaat de moeite waard zou zijn. .
Bron: opennet.ru