[so] Warning-uri si alte probleme
Dan Badea
dan.badea at microsoft-lab.pub.ro
Sun Nov 25 11:55:19 EET 2007
Salut,
Iti multumesc pentru raspuns.
Varianta cu blocarea la ReadFile nu prea poate fi luata in calcul pentru
mesaje de lungimi diferite, deci nu o consider adecvata. Varianta cu un
semafor suplimentar mi se pare cea mai eleganta in acest sens si am sa o
implementez cat de curand ca sa ma conving ca toate testele sunt trecute
cu aceasta varianta de implementare. Pentru ca chiar si asa cum propui
tu, este rezolvata problema momentului de timp la care citesti mesaje
din mailslot (si anume cu vine unul cum il procesezi), dar nu este
rezolvata defapt problema data de metoda de testare. In functie de
workload-ul calculatorului respective la acel moment si de numarul de
clienti care trimi comenzi la server daca tu dai a 100 s 20 p e posibil
sa nu il regasesti pe 100 in arbore.
Inca o data nu inteleg, de ce mi se tot explica ca lectura suplimentara
e buna. Acest lucru e clar si nu l-am contestat eu. Dar nu cred ca
lectura suplimentara trebuie sa se concentreze tot pe temele de la SO ca
in felul asta chiar nu o sa progresezi. Si exact ce ai spus si tu, am
spus si eu, si anume, nu avem prea mult timp ca sa citim nu stiu cate
chestii doar pentru a rezolva o problema simpla.
Cu bine,
Dan Badea
-----Original Message-----
From: so-bounces at cursuri.cs.pub.ro [mailto:so-bounces at cursuri.cs.pub.ro]
On Behalf Of Stefan Bucur
Sent: Sunday, November 25, 2007 11:30 AM
To: Sisteme de Operare
Subject: Re: [so] Warning-uri si alte probleme
On Nov 25, 2007 11:04 AM, Dan Badea <dan.badea at microsoft-lab.pub.ro>
wrote:
> Buna ziua,
>
> Va multumesc pentru recomandari. Din fericire am o copie personala a
cartii pe care mi-ati recomandat-o. Va multumesc si pentru articole,
toate sunt foarte interesante.
>
> Sa trecem totusi inapoi la oile noastre care nu sunt functia strcat in
sine, ci depunctarea automata care este facuta pentru teme si care duce
la bad practices (si anume suprimare de warning-uri).
>
> Am atasat un exemplu care compilat cu g++ sub linux nu produce nici un
warning (-Wall). De aici, sa inteleg ca strcat este deprecated numai
pentru Windows? Sau mai bine sa inteleg ca strcat e deprecated doar pt
compilatorul Microsoft, iar pentru cel al GNU nu?
Compilatorul de Windows isi permite sa dea warning pentru ca Microsoft
ofera alternative (non-standard), securizate, ale functiilor POSIX.
Biblioteca C de Linux nu ofera astfel de functii non-standard, si
astfel nu lanseaza niciun warning. Probabil ca la urmatoarea iteratie
de standardizare a C-ului, va introduce si GCC-ul astfel de
warning-uri. :)
>
> Acum ca sa revin la sugestiile de lectura care mi s-au facut. In
primul rand este vorba despre o tema la SO (si cum bine stiti avem multe
teme), iar daca as sta sa citesc cate mi s-au recomandat pentru fiecare
"problema" care apare, probabil ca, desi as invata foarte multe, nu as
mai termina niciodata TOATE temele. Nu este normal ca atitudinea
reprezentantilor facultatii sa fie aceea in care esti mereu impins spre
lectura personala. Credeti-ma ca am facut destula de acest gen si
majoritatea cunostintelor pe care le-am dobandit se bazeaza pe acest mod
de a invata. Insa nu este deloc normal ca studentul sa fie mereu pus sa
"descopere"/invete singur. Nu venim la scoala ca sa alfam totul din alte
surse. Daca considerati ca acest subiect merita atentie, si ca studentii
ar trebui sa stie ca strcat nu este bine de folosit atunci ar trebui sa
se vorbeasca despre asta. Dar, dimpotriva aceasta este functia care ne-a
fost predata. In concluzie, va rog sa nu apelati la cunostinte pe care
studentul trebuie sa dobandeasca singur atunci cand propuneti (sau
corectati/depunctati) o tema.
>
Daca ar fi sa fie o problema la noi in facultate cu lectura
suplimentara, ar fi ca nu avem suficient timp pentru aceasta, nu ca ar
fi ceva de descurajat, si ca la unele cursuri recurgi la lectura
suplimentara ca sa intelegi ceva care ar fi trebuit explicat bine
direct la curs (si astfel timpul petrecut la curs poate fi considerat
pierdut - no need to talk more about that here ;) ).
Cu toate acestea, mi se pare ca temele si cursul de SO nu intra sub
nici o forma in acea categorie. Daca e nevoie de documentare, ea este
una suplimentara lucrurilor prezentate la curs, care iti imbogateste
cunostintele, incurajeaza deprinderile de autodidact (care iti vor fi
foarte necesare intr-o cariera ulterioara), si se bazeaza pe
inclinatia ta catre acest domeniu. Fluxul de informatii nu trebuie sa
vina dintr-o singura directie si un curs bun nu trebuie sa-ti prezinte
numai niste cunostinte, ci sa-ti formeze si unele deprinderi.
> Cerinta mea de a nu fi depunctat pentru acelasi warning de 4 ori si
pentru un warning care apare numai pe anumite compilatoare si pe altele
nu mi se pare cat se poate de bun simt.
Eu am fost depunctat cu 1 punct si pentru un singur warning. Tind sa
cred ca depunctarea este constanta, atata vreme cat ai cel putin un
warning.
>
> Revenind la strcat va asigur ca din moment ce l-am folosit cunosc
foarte bine modul in care el functioneaza si dependenta acestei functii
de terminatorul de sir. Evident ca atunci cand am scris aceasta parte a
codului am fost atent in a nu face concatenari aiurea. Mai mult in cazul
in care nu as fi fost atent as fi beneficiat de niste neplacute erori de
rulare care m-ar fi impiedicat sa trec vre-un test. Prin urmare nu vad
absolut nici un motiv pentru care era mai indicat sa citesc o carte si
cateva articole pentru a face o operatie simpla, cand defapt cel mai
simplu era sa aplic ce am invatat si sa fac asta corect.
>
Cel mai simplu era sa te uiti pe MSDN si sa rezolvi problema pe
platforma Windows (#ifdef WIN32 #define_CRT_SECURE_NO_DEPRECATE #endif
inainte de #include <string.h>, sau sa folosesti strncpy pentru Linux
si strcpy_s pentru Windows, etc, etc.).
> Din cate vad toata lumea este foarte multumita de acest sistem de
depuncatre automata, dar am sa fac o sugestie in legatura cu
imbunatatirea lui. Macar sa verifice daca este vorba despre acelasi
warning si sa nu depuncteze de fiecare data. Practic daca tema ar fi
presupus un numar mai mare de concaternari (gen 50) puteam sa nici nu ma
obosesc sa o trimit.
>
> Si in final, foarte bine, daca vreti sa corectati temele automat, nici
o problema, dar ca si in viata si aici exista exceptii. Aceasta in mod
clar este una si mi se pare cat se poate de normal sa nu primesc nici o
penalizare.
>
> Astept niste raspunsuri si legat de a doua parte a mail-uli precedent.
Desi functia de interogare a mailslot-ului nu este blocanta, functia
ReadFile apelata asupra unui HANDLE de mailslot este :D. Nu este
nevoie sa faci busy-waiting, ci pur si simplu incerci sa citesti
urmatorul mesaj, si ReadFile se va bloca pana cand pe teava va fi
disponibil unul :) Sau puteai, asa cum facusem eu intr-o faza
initiala, ca sa ma asigur ca totul merge bine (nici eu nu stiam daca
pe Windows functiile de mailslots sunt blocante - am aflat
"experimental"), sa folosesti un semafor care sa indice numarul de
mesaje disponibile; you figure out how to use it :)
Numai bine,
Stefan Bucur
_______________________________________________
so mailing list
so at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
More information about the so
mailing list