Void wziął się za dalsze pythonizowanie Hierophanta (na celownik wziął /etc/hbs/{prep,post}) - wiele to tam nie wywalczy, ale po spythonizowaniu będę mógł trochę ulepszyć automatykę tych sekcji. A w następnym kroku da się może wchłonąć te mechanizmy całkiem w główny skrypt HBS i trochę uprościć jego integrację z resztą, choć to by wymagało nielichych przeróbek.
Ja wziąłem się za skrypt generujący listy PROVIDES/REQUIRES. To był brzydki "legacy code" którego tak naprawdę nie rozumiałem, pisany w mieszance shella i awka i przeportowany prawie żywcem z RPM-a. Jego spythonizowanie chodziło za mną od dawna. Ale ostatecznie napisałem pythonową wersję /etc/hbs/deps... Wyszła przeszło dwa razy dłuższa niż oryginał, ale to mnie nie martwi specjalnie. Ważniejsza jest wydajność:
[j:0 c:0]/home/grzegorz/projekty/PORT> time ./old_deps ./old_deps 25.72s user 4.86s system 98% cpu 31.007 total [j:0 c:0]/home/grzegorz/projekty/PORT> time ./old_deps ./old_deps 25.47s user 4.79s system 99% cpu 30.398 total [j:0 c:0]/home/grzegorz/projekty/PORT> time ./deps.py ./deps.py 0.87s user 0.11s system 99% cpu 0.991 total [j:0 c:0]/home/grzegorz/projekty/PORT> time ./deps.py ./deps.py 0.86s user 0.11s system 99% cpu 0.975 total
Imponujące :) Każdy skrypt pracował oczywiście na tych samych danych wejściowych. Przeanalizowałem działanie rpm-owego oryginału i znalazłem sporo miejsc w których dało się coś zoptymalizować. Ogólnie obciążenie procesora spadło przez to o całą masę procentów. A dokładniej to o 96,8%. Nie znaczy to że generowanie zależności będzie od tej pory trwało taki ułamek czasu, bo wąskim gardłem jest tu nadal I/O dysku (choć i tak odwołania do dysku zredukowałem do drobnego ułamka koszmaru jaki wyprawiały stare skrypty), więc przyspieszenie powinno być "zauważalne jak cholera". Aha, w szybkim teście na /usr/lib nowa wersja wyłapała o parę zależności więcej niż oryginał. Teraz muszę porobić jeszcze parę "regression tests", każę mu generować listy dla każdego pakietu jaki mam teraz zainstalowany i porównam je z oryginałami, choć nie sądzę by mi się jakieś usterki przemknęły...
O, Void podesłał mi właśnie pythonową wersję procedury PREP. Na razie odłożę na bok, bo tego się nie da tak po prostu podmienić jeszcze...
Sprostowanie: Można by odnieść wrażenie, że we wczorajszej mojej
wypowiedzi Void został przedstawiony w złym świetle. Ze względu na
tendencyjny i wyrwany z kontekstu cytat można go było odebrać jako
programistę olewającego użytkowników. To oczywiście nie jest prawdą,
przepraszam jeśli ktoś tak odczytał ten tekst, nie było to moją intencją.
Void jest oczywiście programistą bardzo wyczulonym na potrzeby użytkowników
i nigdy by nie odpuścił żadnemu odkrytemu błędowi.
Oświadczenie to napisałem w pełni zdrowia psychicznego, z własnej
nieprzymuszonej woli.
Hoppke.