Oprócz zakończenia wsparcia dla Pythona 2.7, kolejną ważną zmianą było włączenie
Profilowanie istniejącego kodu wykazało, że większość czasu obliczeń poświęcono na wywołanie funkcji use_reduce i catpkgsplit z powtarzającym się zestawem argumentów (na przykład funkcja catpkgsplit została wywołana od 1 do 5 milionów razy). Aby przyspieszyć działanie, zastosowano buforowanie wyników tych funkcji za pomocą słowników. Najlepszą opcją przechowywania w pamięci podręcznej była wbudowana funkcja lru_cache, ale była ona dostępna tylko w wersjach Pythona począwszy od 3.2. Dla kompatybilności z wcześniejszymi wersjami dodano kod pośredniczący zastępujący lru_cache, ale decyzja o zaprzestaniu obsługi Pythona 2.7 w Portage 3.0 znacznie uprościła zadanie i umożliwiła obejście się bez tej warstwy.
Korzystanie z pamięci podręcznej skróciło czas wykonania operacji „emerge -uDvpU —with-bdeps=y @world” na laptopie ThinkPad X220 z 5 minut 20 sekund do 3 minut 16 sekund (63%). Testy na innych systemach wykazały wzrost wydajności o co najmniej 48%.
Deweloper przygotowujący zmianę próbował także zaimplementować prototyp kodu rozwiązującego zależności w C++ lub Rust, ale zadanie było zbyt trudne, gdyż wymagało przeniesienia dużej ilości kodu i wątpliwe, czy wynik będzie wart wysiłku .
Źródło: opennet.ru