Citat:
Nedeljko
Dakle, Ivan Dimkovic smatra da treba lupiti šamar čoveku koji ne stavi "if(ptr)" ispred "free(ptr);" i sa takvim "znanjem" C programiranja ovde pametuje.
Oooh, Nedeljko... ovo stvarno nisam ocekivao :-)
Hajde da predjemo na neku zamisljenu situaciju, lica iz iste nemaju veze sa stvarnim ljudima i tako to...
Imamo nekog iii teee "menadjera" koji nema pojma o "ceu" (ali je cuo da je mnogo mocna stvar) - covek voli da se prosipa nekim buzzwordima tipa CI/CD, fuzzing, linteri, sanitizeri, dza bu. Zvuci kao da zna o cemu prica ali, ocigledno, pojma nema.
Imamo, takodje, i senior programera (u najmanju ruku) - nazovimo ga picajzla, covek je PhD matematike, zna C uzduz i popreko, ako ga probudis u 2 AM, moze da ti kaze sve UB-ove u C standardu i tako tako. Starija picajzla jako dobro zna da C free nece da se u*ere ako mu bacis null pointer, cak je vrlo raspolozen da citira svoj mali dzepni man().
Divno, situacija cista k'o dan, jel da?
Hajd da vidimo malo mi to.
Za pocetak, predmet ove diskusije je GRUB (ocigledno jako dobro ime, larve se mogu naci na napustenom izmetu) i njegovi nesrecni dani kada su uspeli da s*ebu Internet sa sampionskim bagom koji je bio samo uvertira za nalazenje jos sampionskih bagova.
Ali iiteee menadjer "pametni" je izabrao drugi commit, ovaj,
https://git.savannah.gnu.org/c...8287ed3af32fffe8aaf33cdff52f6b
Koji je naseg starijeg programera picajzlu naterao da "baci K&R (pardon, C99) knjigu" na glupog iii teee menadjera! Ako mu je rekao!
Steta sto je picajzla Sr. propustio da primeti da je neki jadni GRUB programer morao da ubaci nazad ocigledno suvisan kod koji, po nasem iskusnom picajzli, cak jos trosi i resurse (o ovome cemo da se pozabavimo na kraju).
Kako to? Neko u GRUB timu je primetio da nisu bas sigurni da na svim host OS-evima kompajleri nece za*ati stvar i puci unutar free() poziva sa null pointerom.
Sticajem okolnosti, takvi kompajleri postoje - jedan mobilni OS svakako nije cenio C specifikaciju. Cak i neki malo ozbiljniji OS-evi o kojima stariji picajzla sigurno jako dobro zna. Ali, verovatno, umesto jedne komparacije (koju ce mocni ISO, C99 i man() opremljeni kompajleri sa konformantnom free() f-jom verovatno optimizovati i pretvoriti u nop :-) stariji picajzla je verovatno spreman da se raspravi sa celim svetom i objasni im da ne umeju da citaju man(), a ni ISO specifikacije. Go, picajzla, go!
...
OK, GRUB mozda mora da se nosi sa kojekakvim nestandardnim varijantama, neko ce reci, ali ako je kod "garantovano ISO C" ili POSIX ili sta god, onda je Dr. Picajzla definitivno u pravu i itteeeee menadjer prica iz svoje g*zice?
Da, definitivno je Dr. Picajzla u pravu, trebalo bi ga poslati na sledeci svetski kviz UB-a i tajni ISO C-a!
Ali... u hladnom i iskvarenom svetu punom sampiona i idiota, insistirati na defanzivnoj proveri pointera u kodu koji je sigurnosno kritican je prilicno dobra ideja, kaze ii tee menadjer.
Mozda iiteee menadjer pojma nema o Ceeu, cak bi mozda pomenuo i jos nekih buzzword-a tipa FMEA, ali ko bi lud verovao da neko to koristi u danasnjoj sw. industriji. Cak i teorijski, taj buzzword je za menadjera i njegove kolege menadjere kad se zapiju posle sastanaka, pa necemo uopste ulaziti u to.
Za nas smrtnike je sasvim dovoljno sledece kao savet za picajzlin tim: instaliraj fckin linter i postene sanitizer-e u proces kreiranja izvr.. pardon (menadjer glas) "artefakta ba!".
A, da, i zameniti picajzlu Sr. (tj. realocirati coveka na nesto pametno) sa nekim proceduralnim grunt-om koji ce da ubija za propustenu proveru ako vec alatka za analizu udari Turingov zid. Sta bi rekao nas 'ajzla na to? Tako sljaka vojska a ne neki intelektualni tim? Da, vojska... znaju par stvari sa radjenjem kompleksnih operacija u svetu punom "naroda", pardon - GRUB dev-ova. Ako 'oces radis disertaciju, zanemari sve ovo... ako 'oces softver za narod i sa narodnim komponentama? Poslusaj glupog menadjera, covek mozda zna kako da ustedi kintu i zivce kasnije.
E jbg, ako menadjer se*e sve vreme... onda drzati se pameti. GRUB ekipi odlicno ide :-)
Konacno, za kraj, jos jedan komentar koji bi menadjeeer dao 'ajzli starijem:
Citat:
Da, ubacivanje "if(ptr)" ispred "free(ptr);" i pisanje funkcije koja radi samo to je neznanje koje samo troši dodatne CPU cikluse
Oh :-) Ali umisljeni menadjer je mozda cuo za neke mnogo pametne kompajlere koji ce nop-ovati (jel se tako kaze, a? pita menadjer) proveru koja je nepotrebna ako posle ubacuju optimizovanu free f-ju (koja i ovako i onako radi proveru)? Ili to ne umeju da urade, pih!
Ali po strani brojanje CPU ciklusa ili cak uzimanje u obzir nekompatibilnih C biblioteka, 'cajzla sr. propusta da vidi sasvim drugu vrednost provere u ovom slucaju.
Mozda zato sto 'CajzlaEx ceo svet vidi kroz svoje PhD naocare, umesto kao nesto mnogo ruznije i gluplje... jbg.
Profesionalna miopija.
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos:
http://www.digicortex.net/node/17 Gallery:
http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! -
https://github.com/psyq321/PowerMonkey