psergiu - 02 Decembrie 2008 11:57 PM
aramdune - 02 Decembrie 2008 05:32 PM
.... Alege un limbaj simplu gen C,...
(considerați că aici este un smiley căruia i s-a ridicat părul din cap) (considerați că aici este un smiley care s-a înnecat și tușește)
Oi fi eu biased ca scriu module de kernel, dar totusi ideologia mea de-o viata in domeniul IT este “use the right tool for the right task”, asa ca nu as recomanda ceva doar pentru ca eu folosesc sau am folosit acea unealta, ci pentru ca parerea mea este ca iti este util tie, cel care a pus intrebarea.
Rog a citi exact ceea ce am spus, si nu ceea ce i se pare cuiva ca as fi spus
. Am spus ca “C este un limbaj simplu”, nu ca “programarea in C este simpla”
. Limbajul C este un limbaj mult mai simplu decat C++, Obj-C, Java sau Python. Are un footprint foarte mic—are doar vreo 32 de cuvinte cheie, dintre care multe sunt redundante (3 tipuri de bucle, mai multe moduri de a face o selectie), alte cuvinte cheie nu se mai folosesc (auto, register) etc. Pana si cartea fundamentala de C, “The C Programming Language” de Brian Kernighan si Dennis Ritchie e doar o fituica de un deget grosime comparata cu cartea fundamentala de C++ a lui Bjarne Stroustrup care e cat 2 biblii puse una peste alta.
C este un limbaj imperativ extrem de mic si prin urmare se invata mult mai repede decat un limbaj care stie programare procedurala, programare orientata pe obiect si programare functionala ca Python, sau metaprogramare ca C++.
C este un limbaj de nivel mediu. Drumul normal e de la low level la high level. Astfel un programator poate sa inteleaga bine ambele si sa stie cand se foloseste unul si cand celalalt.
psergiu - 02 Decembrie 2008 11:57 PM
c este un limbaj “simplu” doar daca cunoști foarte bine arhitectura hardware a sistemului pe care lucrezi:
- aranjarea biților în registrele procesorului;
Aranjarea bitilor in registrele procesoarelor te intereseaza daca scrii cod trully low-level, de exemplu drivere, compilatoare si stseme de operare. In 99% din cazuri nici macar nu stii ca exista procesorul are registre. Programatorul C lucreaza cu ce ii spune standardul, si standardul nu zice nimic despre endianess. Cand copiezi 2 variabile o sa se copieze foarte bine fara sa ai habar de existenta little-andian si big-endian.
psergiu - 02 Decembrie 2008 11:57 PM
lățimea unui char, word & log pe pe acea platformă;
Catusi de putin adevarat. De fapt daca programezi cu notiunile alea in minte o sa scrii cod prost. Ce-a mai mare problema cu portarea softului pe 64 bit este ca programatorii au presupus ca sizeof(int) == sizeof(void *) pentru ca asa era pe 32 bit pe platforma lor preferata.
Standardul C iti garanteaza latimi minime si/sau maxime alte tipurilor primitive de date cu care lucrezi. Limbajul C nu este legat de vreo masina anume.
psergiu - 02 Decembrie 2008 11:57 PM
modul în care CPU accesează memoria & porturile de I/O;
Nu o sa accesezi NICIODATA porturi de I/O in C, pentru ca limbajul C nu stie ce sunt alea porturi de I/O. In primul rand nu se poate face din user space. In kernel space o sa accesezi porturi de I/O in ASM, dar deja ala e alt domeniu avansat si parca aici vorbeam despre ce recomandam unui incepator
. Un incepator care programeaza in C nu trebuie sa stie ca exista porturi de I/O pentru ca el foloseste doar ce e in biblioteca standard si eventual ce e in biblioteci 3rd party.
Iar cand programezi user space in C “memoria” este o abstractie, ca in orice alt limbaj mai sus de Assembler. Sigur, trebuie sa stii ca accesul la memorie e lent, dar cam atat.
psergiu - 02 Decembrie 2008 11:57 PM
și legat de punctul de mai sus - modalitățile de comunicare cu utilizatorul impuse sau/și oferite de către hardware sau/și de către sistemul de operare.
Ba pardon. Trebuie sa folosesti, mai ales ca esti incepator, ce e in biblioteca standard, care cum am zis deja nu e legata de vreo implementare anume.
Daca vrei sa folosesti ferestre si socketuri—deja nu mai tine de niciun limbaj. Se face la fel in toate cu ce-ti ofera sistemul de operare, managerul de ferestre, x serverul sau orice altceva trecute eventual prin niste layere de abstractie concretizate prin niste biblioteci oarecare. In orice caz, asta e ultima problema a unui incepator. Un incepator scrie text in consola si citeste date de la tastatura sau din fisiere.
Continuarea in postul urmator. Se pare ca forumul are o limita de caractere suspicios de mica.