çlirimi i sistemit të menaxhimit të pacaketeve , i përdorur në distributionsit . Dega e paraqitur përfundoi një punë të gjatë për kalimin në Python 3 dhe përfundimin e mbështetjes për Python 2.7.
PĂ«rveç pĂ«rfundimit tĂ« mbĂ«shtetjes pĂ«r Python 2.7, njĂ« ndryshim tjetĂ«r i rĂ«ndĂ«sishĂ«m ishte pĂ«rfshirja e , qĂ« i mundĂ«suan njĂ« rritje prej 50-60% nĂ« performancĂ« lidhur me pĂ«rcaktimin e varĂ«sive. ĂshtĂ« interesante se disa zhvillues propozuan tĂ« ribĂ«jnĂ« kodin e zgjidhjes sĂ« varĂ«sive nĂ« C/C++ ose Go pĂ«r tĂ« pĂ«rshpejtuar funksionimin e tij, por u arrit tĂ« zgjidhej problemi i ekzistueshĂ«m pa shumĂ« vĂ«shtirĂ«si.
Kryerja e profilizimit të kodit ekzistues tregoi se koha kryesore gjatë llogaritjeve shpenzohej në thirrjet e funksioneve use_reduce dhe catpkgsplit me një grup të përsëritur argumentesh (p.sh., funksioni catpkgsplit u thirr nga 1 deri në 5 milion herë). Për të përshpejtuar, u përdor caching i rezultateve të këtyre funksioneve duke përdorur fjalorë. Funksioni i integruar lru_cache ishte optimal për ruajtjen e caches, por ai ishte i disponueshëm vetëm në versionet e Python, duke filluar nga 3.2. Për të siguruar kompatibilitetin me versionet e hershme, u shtua një zëvendësim që zëvendësonte lru_cache, por vendimi për të përfunduar mbështetjen për Python 2.7 në Portage 3.0 e thjeshtoi shumë detyrën dhe lehtësuar që çështja të kalonte pa këtë shtesë.
Përdorimi i caches lehoi që koha e ekzekutimit të operacionit "emerge -uDvpU --with-bdeps=y @world" në laptopin ThinkPad X220 të ulej nga 5 minuta 20 sekonda në 3 minuta 16 sekonda (63%). Testet në sisteme të tjera treguan një rritje të performancës që nuk ishte më e ulët se 48%.
Zhvilluesi që përgatiti ndryshimin gjithashtu përpiqej të realizonte një prototip të kodit të zgjidhjes së varësive në C++ ose Rust, por detyra rezultoi shumë e komplikuar, pasi kërkonte portimin e një sasi të madhe kodi, dhe për më tepër, ishte e dyshimtë se rezultati i arritur do të ishte i vlefshëm për përpjekjet e shpenzuara.
Burimi: opennet.ru
