Da, de-aia si avem depunctare daca nu folosesti static la globala interna unui modul. Problema cu multe accese la o globala si complicarea procesului din cauza asta este o non-problema. Doar un amator ar scrie cod cu side effects si accese aiurea la o globala.
Mai exista si variabilele extern si nu vad nici o problema in a le folosi indiferent de dimensiunea codebase-ului __daca ele au sens__ in contextul dat. Legat de goto statements am uitat sa vi-l recomand pe Knuth: http://cowboyprogramming.com/files/p261-knuth.pdf On Mon, 15 Apr 2019 at 12:43, Paul Olaru <olarupaulstelia...@gmail.com> wrote: > > Globalele sunt o problemă în proiectele mari pentru că este mai dificil să > vezi ce cod le folosește. Și pentru majoritatea situațiilor la care mă > gândesc (INCLUSIV cea din tema asta) mă gândesc că o variabilă globală > limitată (sau statică per clasă) este suficient -- elimină problema efectelor > secundare fără a îngreuna utilizarea codului în sine. Mai ales că suntem > single threaded și nu e nevoie nici măcar de sincronizare, în situația de > față variabilele globale (cu static) sunt chiar ok. Recomand 'static' acolo > pentru ca alte module să nu modifice imprevizibil variabila. > > Un global global fără nicio restricție e ok în proiecte până în 1000-2000 de > linii după părerea mea (sau proiecte mai mari dacă e mult boilerplate; ideea > e ca întregul cod să încapă în mintea unei singure persoane) dar în acelea > care sunt mai mari, sau vor deveni pe viitor mai mari, pot deveni o problemă > dacă le folosești fără un motiv bun. Zic că complică procesul de debug pentru > că există posibilitatea să existe multe accese la aceeași variabilă globală. > Soluția cu 'static' rezolvă chestia asta în cele mai multe situații -- > rareori e o restricție reală. > > On Mon, Apr 15, 2019, 12:36 PM Mihai Barbulescu via so <so@cursuri.cs.pub.ro> > wrote: >> >> 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@cursuri.cs.pub.ro> wrote: >> > >> > "Alexandru-Ionuţ MÎNDRU (87849)" via so <so@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 >> _______________________________________________ >> http://ocw.cs.pub.ro/courses/so/info/lista-discutii -- Cu stimă, Mihai Bărbulescu _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii