издаване на система за управление на пакети , използвана в дистрибуцията . Представената версия обобщава дългогодишната работа по преминаване към Python 3 и прекратяване на подкрепата за Python 2.7.
Освен прекратяването на подкрепата за Python 2.7, друго важно нововъведение е включването на , които позволиха да се ускори изчисленията, свързани с определяне на зависимости, с 50-60%. Интересно е, че някои разработчици предложиха да се пренапише кодът за разрешаване на зависимости на C/C++ или Go за ускоряване на работата, но беше успяно решен проблемът с малко усилия.
Провеждането на профилиране на съществуващия код показа, че основното време по време на изчисленията се харчи за извикването на функциите 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
