Освен края на поддръжката за Python 2.7, друга важна промяна беше включването на
Профилирането на съществуващия код показа, че по-голямата част от времето за изчисление е изразходвано за извикване на функциите use_reduce и catpkgsplit с повтарящ се набор от аргументи (например функцията catpkgsplit е извикана от 1 до 5 милиона пъти). За да се ускорят нещата, беше използвано кеширане на резултатите от тези функции с помощта на речници. Най-добрият вариант за съхранение на кеша беше вградената функция lru_cache, но тя беше налична само в версии на Python, започващи с 3.2. За съвместимост с по-ранни версии беше добавен пън, който да замени lru_cache, но решението да се прекрати поддръжката на Python 2.7 в Portage 3.0 значително опрости задачата и направи възможно да се направи без този слой.
Използването на кеша намали времето за изпълнение на операцията „emerge -uDvpU —with-bdeps=y @world“ на лаптопа ThinkPad X220 от 5 минути 20 секунди на 3 минути 16 секунди (63%). Тестовете на други системи показаха увеличение на производителността от поне 48%.
Разработчикът, подготвил промяната, също се опита да внедри прототип на кода за разрешаване на зависимости в C++ или Rust, но задачата беше твърде трудна, защото изискваше пренасяне на голямо количество код и беше съмнително, че резултатът ще си струва усилието .
Източник: opennet.ru