k47.cz  — každý den dokud se vám to nezačne líbit
výběr foto Praha povídky kultura
TECH ▞▞ kolo | twitter RSS
««« »»»

Samaritán a segfault

7. 10. 2019 — k47 (♪)

Svo­bodný soft­ware stojí na zádech dob­ro­vol­níků, kteří otročí bez nároku na plat, slávu nebo věčný život v našich ko­lek­tiv­ních srd­cích. Někdy nic z toho ne­če­kají, pro­tože jen řeší své pro­blémy. Když něco ne­fun­guje pro vás, dost možná přesně to samé štve někoho dal­šího.

V tomto duchu mi vadilo, že Ris­tretto – pro­hlí­žeč ob­rázků při­ba­lený k pro­středí Xfce – nebyl příliš svižný při na­čí­tání složky s 20000 ob­rázky & pro­tože rych­lost je moje věc, musel jsem to jako kyber-sa­ma­ri­tán na­pra­vit. Kód do­slova volal po spa­si­teli.

Teď vám musím něco po­vě­dět o kva­d­ra­tic­kém cho­vání. Pokud máte li­ne­ární al­go­rit­mus, na­čtení jed­noho ob­rázku trvá (dejme tomu) jednu vte­řinu, na­čtení pěti pak pět vteřin. Kva­d­ra­tický al­go­rit­mus zvládne jeden za vte­řinu, zatím všechno v po­řádku, ale pět mu trvá ±25 vteřin – pět na druhou, kva­d­ra­tura (budu ig­no­ro­vat fakt, že asympto­tická ana­lýza ig­no­ruje kon­stanty, které hrají velkou roli v re­ál­ném světě). Pro­gram běžící v kva­d­ra­tic­kém čase je špatná věc a měli bychom se jí vy­hnout, pokud to jde. Nikdo nechce pomalé apli­kace.

Když jsem se na­vi­go­val zdro­já­kem Ris­tretta a snažil se po­cho­pit, jak do sebe jed­not­livé části za­pa­dají, na mě jeden kva­d­ra­tický čas vy­koukl. Ro­ze­klané řádky C kódu jsem hladil po­hle­dem a hele, tady jedna je. Pár řádků níže, tohle bude taky kva­d­ra­tické. O něco dál zase a pak zase. Čtyři pří­pady v jediné funkci a jeden v další. Někdo by vý­vo­já­řům měl říct, že exis­tují jiné datové struk­tury než spo­jové se­znamy.

Ono to vět­ši­nou nevadí, člověk otevře pár ob­rázků a je hotový. Pro do­sta­tečně malé n je n2 pořád prťavé. Moje mise byla 200002 a to je vi­di­telně víc než nula.

Je­di­nou pře­kážku mezi mnou a slávou před­sta­vo­val fakt, že Ris­tretto je na­psané v jazyku C a ten je… jak to říct? Je jako čínská vý­chova, bez utr­pení se člověk nic ne­na­učí. Po­skytne jen pri­mi­tivní ná­stroje, na­ostřený klacek, kus kamene, pro­vá­zek a pocit zra­ni­tel­nosti ve stepi a oče­kává, že z toho po­sta­víte ja­der­nou po­norku. Někdo ji sku­tečně po­sta­vil, ale roz­hodně to není ide­ální ná­stroj pro daný úkol. Nic nedává smysl, všechno je oš­k­livé, nemůžu přímo říct, co chci udělat, musím pro­vá­dět divoké tance, abych uspo­ko­jil vše­mo­houcí kom­pi­lá­tor a bi­zarní před­stavy komise, které byl stan­dard C18 vy­je­ven starým bohem Baalem po obě­to­vání troj­hlavé kozy. Jo a když někde udělám chybu, může se stát cokoli a nic na světě mě ne­va­ruje. C je jako bůh ze starého zákona – krutý, na­ho­dilý ve své kru­tosti a nikdy nedává va­ro­vání. Pro­vi­nil ses proti jed­nomu ze stovky při­ká­zání? Doufám, že máš rád solné sloupy. C ko­mu­nita je ale pod­ni­kavá a proti oš­k­li­vosti, kru­tosti a pri­mi­tiv­nosti jazyka bojuje vy­na­lé­zá­ním dal­ších oš­k­li­vostí.

Do toho jsou zdro­jáky za­psány GNU stylem, který po­bouří kaž­dého sluš­ného občana. Abych to při­blí­žil, nor­mální prog-jazyky jsou jako lidé, kteří mají rádi malby Ilji Repina. C je jako člověk, který chodí na po­divné art-per­for­mance, kde za­platí dvě stovky, aby v han­gáru mohl křičet na kámen. C v GNU stylu je na tom po­dobně, jen on je ten kámen, hangár je plný hadů, ze stropu kape láva a vzduch je 70% tvořen me­ta­nem a z 30% vzpo­mín­kami na Auschwitz.

Klid. Klid. Zhlu­boka se na­dech­nout, to přejde. Šok odezní a třeba to budu vidět jinak, třeba na­ko­nec přece jenom vy­ře­ším tenhle pro­blém, který mají asi tři lidé na pla­netě. Nádech. Výdech.

Na­ko­nec děs přece jen ustou­pil. Zákopy první svě­tové války si nikdo asi ne­u­ží­val, ale vojáci si zvykli. Strach a úzkost zů­stala, byla jen za­tla­čena dost hlu­boko, aby se mohli vě­no­vat snahám pře­žití. Začal jsem stu­do­vat oš­k­li­vosti GTK a GDK kom­pen­zu­jící oš­k­li­vost céčka a začal něco dělat. Už to nebylo jen zírání do strá­nek pro­gra­mo­vého Ne­cro­no­mi­conu, ale něco víc, postup vpřed ze zákopů.

Pak na­jed­nou na mě vy­sko­čil se­g­fault – ne­o­práv­něný pří­stup do paměti.

Kde se to stalo? C od­po­vě­dělo: To ti ne­řeknu. Proč? To ti ne­po­vím. Co jsem udělal špatně? Přečti si C stan­dard, je to jen 534 strá­nek, burane.

A to byl oka­mžik, kdy jsem pře­stal. Čas můžu marnit lep­šími způ­soby jako třeba psaním to­ho­hle článku. Céčko pře­ne­chám jiným lidem, kteří se nebojí božího hněvu, mají větší to­le­ranci bo­lesti a lépe snáší bláto zákopů.

píše k47 & hosté, ascii@k47.cz