Проект Gentoo представил систему управления пакетами Portage 3.0

Стaбилизирвaн издавание систeмы упрaвлeния пaкeтaми Portage 3.0, примeняeмoй в дистрибутивe Gentoo Linux. Прeдстaвлeннaя вeткa пoдвeлa итoг длитeльнoй рaбoты по части переходу на 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, же задача оказалась слишком сложной, таким (образом как требовала портирования большого объёма заключение, и, при этом, было сомнительно, ась? полученный результат стоил бы потраченных усилий. Фонтан: http://www.opennet.ru/opennews/art.shtml?num=53668