k47.cz
výběr kolo foto Praha povídky kultura
TECH ▞▞ | twitter RSS
««« »»»

Krev a střeva interpretru

11. 8. 2020 — k47

Jsem prostý člověk s pros­tými zá­li­bami. Chci rychle jezdit na kole, psát rychlé pro­gramy a pře­vzít kon­t­rolu na pro­středky výroby. Jed­no­du­ché zá­kladní tužby. Nechci nic, jen rych­lost.

To mě při­vádí k dneš­nímu tématu: PHP. Pro ty, kdo nejste v obraze, jde o napůl pro­gra­mo­vací jazyk a napůl před­zvěst konce světa. Z důvodů, které jsou ztra­cené dě­ji­nám, se ve velkém roz­mohl na webu jako lingua franca toho, co běží na ser­ve­rech. Stará k47čka běžela na PHP, wi­ki­pe­die běží na PHP. PHP je všude, jako bi­zarní ex­tre­mo­filní bak­te­rie, které pře­žijí mráz le­dovců, horko lávy a vakuum kosmu. A to není dobrá zpráva. PHP má k do­ko­na­losti a ele­ganci velice daleko. Je to oš­k­livý pro­dukt bi­zar­ních evo­luč­ních pro­cesů, který Rasmus Ler­dorf po­ro­dil po seanci s mrt­vými bohy z po­to­pe­ného města R'lyeh a ne­e­u­kli­dov­ská ge­o­me­t­rie Lo­vecraf­tov­ské noční můry v něm pře­žívá. Po­divná syn­taxe, ne­kon­zis­tence, bi­zarní a ne­in­tu­i­tivní cho­vání, do­ku­men­tace, která je jen tak kom­pletní, aby ve vás na­vo­dila pocit bez­pečí a hned ude­řila jako banda kul­tistů s obět­ními dýkami. Ge­ne­race op­ti­mistů se tem­notu v nitru sna­žily zazdít novými ver­zemi, které od­stra­ňo­valy nej­větší hříchy proti lid­skosti, ale zlo stále pro­sa­kuje skrz.

To je ale jen oš­k­li­vost na po­vrchu, zlo se kterým při­jdete do styku, když píšete PHP. Pod po­vr­chem číhá zlo zcela se vy­my­ka­jící lid­skému rozumu. Střeva in­ter­pre­tru jsou na­psaná v jazyce C, ob­skur­ním, pra­starém a se­be­vě­domě sa­dis­tic­kém jazyce a nikde není ani řádek, který by vám vy­svět­lil, co to zna­mená.

Z na­prosté ne­pří­tom­nosti ko­men­tářů do­slova mrazí v zádech. Proč by to někdo dělal? Proč by někdo napsal sto tisíc řádků jazyku, jehož spe­ci­fi­kace v prvním pa­ra­grafu vý­slovně uvádí, že vás osobně ne­snáší, ale ne­vy­svět­lil, co, jak a proč? C je jako no­vostavba na mi­no­vém poli – musíte si dávat sakra pozor, abyste ten barák po­sta­vili a vý­sle­dek je im­pre­sivní ukázka od­hod­lání, ale exis­tuje tolik lep­ších mož­ností. A ne­řek­nou nic. Jakou roli hraje tahle pro­měnná? Jaké může mít hod­noty? Kdo a jak ji na­sta­vuje? Tohle pole se jme­nuje flags. Jakou mno­žinu pří­znaků re­pre­zen­tuje? Jeden soubor de­fi­nuje funkce _zend_hash_init, zend_hash_init, zend_hash_init_exzend_hash_real_init. Co každá z nich dělá? Kdy mám jakou použít? Jakou z nich mám vůbec použít? Nic. Ani slovo.

Když si pře­čtete Ne­cro­no­mi­con, víte na čem jste. Jste v háji, to je jasné, ale jis­tota hrůz­ných faktů je vždy uspo­ko­ji­vější než ne­jis­tota a po­ten­ciál toho samého. Jazyk a run­time může mít zcela ab­surdní cho­vání nad kterým zů­stává rozum stát, může od uži­va­tele vy­ža­do­vat slo­žité tance a kom­pli­ko­vané ma­né­vry, aby vy­ho­věl jeho vr­to­chům, to je fajn. Není to pří­jemné, ale je to fajn, pro­tože když je cho­vání za­psané černé na bílém, víme na čem jsme. Můžeme se jím řídit. Když ale není za­psáno nic, na­zna­čeno ještě méně a cho­vání je kom­bi­nací im­ple­men­tač­ních de­tailů, náhody, kos­mické karmy a špat­ných vtipů, co máme sakra dělat? Jak v tom můžeme pra­co­vat? Jak můžeme vy­lep­šit sou­časný ma­ra­zmus, když nám po­hr­davé ticho PHP in­ter­pre­tru hází klacky pod nohy.

Nic z toho jsem ne­chtěl dělat. Ne­chtěl jsem se do toho pouš­tět. Ani v nejmen­ším. Psal jsem článek na 0xDE­AD­BEEF a zaběhl jsem se. Na­padlo mě, že by se bylo možné zrych­lit funkce sort, rsort, asortarsort s pa­ra­me­t­rem SORT_NU­ME­RIC po­u­ži­tím radix sortu. Prostá a ušlech­tilá myš­lenka, změna by se mi hodila a v duchu free soft­ware se může hodit i dalším lidem. Chvíli nevím, co se dělo a pak jsem se při­stihl, jak křičím na ob­ra­zovku a vy­hro­žuju makru HT_SIZE_TO_MASK, že jestli mi hned ne­vy­zradí všechna svá ta­jem­ství, ot­rá­vím celou jeho rodinu ri­ci­nem. V jednu chvíli jsem byl tak na­štvaný a frustro­vaný ne­pro­nik­nu­tel­ností C kódu, že jsem se musel projít.

Na­ko­nec jsem to po nad­lid­ském utr­pení dal. Nová verze řadí asi 2.5× rych­leji, ale za jakou cenu? Při­pa­dám si o pat­náct let starší, jako ve­te­rán, který se vrátil z války a nese si trau­mata, která ne­po­chopí nikdo, kdo tam nebyl.

Jo. Pro­gra­mo­vání je krásné. Hlavně pokud máte rádi ten svěží pocit, když jste po­hřbí­váni zaživa.

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