[so] [Tema3][Linux] fisier executabil
Mihai Barbulescu
b12mihai at gmail.com
Mon Apr 15 12:36:41 EEST 2019
Salutare tuturor,
In completarea maestrului RD eu unul chiar incurajez in situatii
extreme/in situatii in care nu se pot evita atat folosirea goto cat si
folosirea variabilelor globale.
Exemple de folosire a variabilelor globale pe langa cel de care tocmai
v-ati lovit (si este OK si __IN REGULA__ sa folositi globala) ar fi sa
aveti un state machine asupra caruia umbla mai multe threaduri (sau
nu) - de ex pt a stii starea curenta (daca ai threaduri faci accesul
"sincronizat").
Un exemplu de folosire goto aveti chiar pe wiki pentru eliberarea
resurselor [1]. Acest approach e foarte important in lucrul cu
dispozitive embedded pentru ca puteti lasa intregi resurse hardware
marcate ca "ocupate" aiurea
Paul Olaru: as vrea si o justificare pentru afirmatia "E bine să nu ai
mai multe globale decât este necesar (complică mult procesul de
debug)." - ce inseamna ca procesul de debug e complicat? Debuggerul
stie sa arate si variabilele globale, de-aia fiecare proces are acea
zona de memorie pt globale (.data si .bss) si poti debuga continutul
lor prin breakpoint si inspectand acele zone de memorie ca sa fii
sigur. E complicat procesul de debug ca trebuie sa te uiti in "inca o
zona de memorie"? Raspunsul meu e NU, asta vine doar din
lene/necunoastere.
Stiu paper-ul la care te gandesti - ca sa nu ai side effects sau alte
probleme de care zice acolo inseamna doar sa scrii codul cu ceva mai
multa grija, lucru care oricum ar trebui sa va intre in reflex.
Ah, da, la SD daca aveti de implementat lucrul pe o lista inlantuita
si declarati o globala pt structura lista inlantuita ca sa scrieti
functii cu cat mai putini parametrii sunteti noobs, de-aia va
interzice la SD sa faceti asemenea abominatii. Dar este, asa cum a zis
RD, o recomandare/guideline care admite exceptii.
Sper c-am reusit sa demontez fake news-ul conform caruia globalele
sunt diavolul pe pamant....Sunt o unealta asa cum e si tesla si
trebuie sa ai grija sa nu iti dai cu ea in ... stiti voi continuarea.
[1] https://ocw.cs.pub.ro/courses/so/laboratoare/resurse/die#alta_abordare
On Sun, 14 Apr 2019 at 22:59, Razvan Deaconescu via so
<so at cursuri.cs.pub.ro> wrote:
>
> "Alexandru-Ionuţ MÎNDRU (87849)" via so <so at cursuri.cs.pub.ro> writes:
> > Eu cel puțin știu de la PC/SD din anul 1, nu mai știu exact care
> > dintre cele 2. Era regula pentru teme să nu se folosească variabile
> > globale, se scădea puncte pe treaba asta, fără a se explica de ce e
> > greșit sau de ce să nu le folosim.
>
> Well, there's your problem.
>
> > Chiar și acum la tema 1 la PC spre exemplu, există această regulă.
>
> O să discutăm cu cei de acolo.
>
> > Cei drept acum nu am verificat strict pentru SO dacă există această
> > regulă, dar am rămas cu acest lucru și presupun că și alții.
>
> Există reguli și există recomandări. Regulile sunt foarte puține (citat
> aproximativ Jack Sparrow). În dezvoltarea aplicațiilor sunt foarte
> puține "golden rules". Luați recomandările, țineți-vă de ele, dar
> admiteți când e o prostie să te ții de ele cu dinții doar pentru că "așa
> e bine".
>
> Exemple de recomandări, nu reguli, au excepții
>
> * Nu folosiți variabile globale.
>
> * Nu folosiți goto.
>
> * Puneți funcțiile deasupra main-ului.
>
> * Folosiți thread-uri, operații asincrone, expresii regulate, semnale.
>
> * Faceți codul portabil.
>
> Exemple de reguli sau lucruri care sunt mereu bune (nu știu să aibă
> excepții în afara unor concursuri de genul "Obfuscated C contest").
>
> * Să fie codul consecvent. Prost dar consecvent prost decât bine în n
> feluri.
>
> * Variabile și funcții denumite cu cap, nu tmp_var, do_stuff, my_var.
>
> * Defensive programming: "Always code as if the guy who ends up
> maintaining your code will be a violent psychopath who knows where you
> live".
>
> * Trecut codul prin verificatoare statice și dinamice.
>
> * Făcut recenzie la cod.
>
> Răzvan
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
--
Cu stimă,
Mihai Bărbulescu
More information about the so
mailing list