"Ce ne facem insa cu JavaScript unde se foloseste plus in ambele cazuri si se pare ca adunarea unui numar cu un string da tot timpul string. Inseamna ca vom avea tot felul de rezultate pentru x plus y, in functie de cum se nimeresc sa fie x si y la rulare. Pana la urma trebuie sa iti bati capul si aici cu convertiri si cu tot felul de asigurari ca nu se pot intampla anumite lucruri. Ba mai mult, teoretic poate aparea in timpul rulari operatia 10 impartit la "Gigi", iar pentru a ma asigura ca nu se intampla acest fenomen iar trebuie sa verific daca rezultatul unei impartiri nu este NaN,."
Javascript nu este un limbaj extraordinar de complex, asa ca nu este cel mai nimerit exemplu de limbaj dinamic, dar oricum, intotdeauna trebuie sa verifici daca datele sunt de un anumit tip sau daca nu trebuie sa imparti cumva la zero, chiar daca se foloseste un limbaj puternic tipizat.
Datele se preiau din afara programului, din surse externe, si ele trebuie intotdeauna verificate.
Si daca programul este creat cu un limbaj puternic tipizat, daca interfata lui ii permite utilizatorului sa introduca "Gigi" in locul unui numar care este folosit intr-o impartire, acel program oricum va da o eroare urata, iar ca sa nu dea o eroare ci sa afiseze un mesaj frumos si informativ, trebuie sa verifice daca datele introduse sunt numere si ori sa ii dea un mesaj frumos, ori sa nu il lase pur si simplu pe utilizator sa introduca date incorecte, si exact acelasi lucru trebuie sa faca indiferent de limbajul de programare folosit.
"Totusi, avantajul la statice e ca nu te lasa din start sa compilezi daca nu e clar ce cu ce combini."
Nu te lasa sa compilezi daca nu combini tipul de variabile permise, dar in faza de compilare tot nu sti ce valori vor fi introduse pentru acele variabile in timpul rularii, asa ca tot trebuie sa verifici daca acele valori sunt de tipul permis, adica exact ceea ce trebuie sa faci indiferent de limbajul folosit.
"Asadar, in cazul limbajelor dinamice trebuie facute mai multe verificari in timpul rularii, poate de aceea pare putin ciudat un astfel de limbaj pentru cine e obisnuit cu rigoarea si a inceput sa programeze intr-un mod static."
In afara de verificarea datelor de intrare, verificare pe care trebuie sa o faci si in cazul programelor scrise cu un limbaj puternic tipizat, nu trebuie sa faci alte verificari in plus, fiindca cu aceleasi date de intrare si aceiasi algoritmi, programele dau aceleasi tipuri de rezultate indiferent daca sunt scrise cu limbaje puternic tipizate sau nu.
Spre deosebire de programele statice, programele dinamice ofera unelte cu care poti lucra mai bine in acele limbaje. Nu este ca si cum ai lucra in C++ doar cu singura diferenta ca o variabila poate avea orice tipuri de valori.
De exemplu, in Perl exista operatori distincti pentru adunare si concatenare, asa ca poti folosi + pentru adunare si punct pentru concatenare, (sau ~ in Perl 6), iar in Python desi o variabila poate avea orice tipuri de valori, limbajul nu permite adunarea a doua valori daca sunt de tipuri diferite.
"Din cate am vazut exista limbaje care pot fi folosite atat static cat si dinamic, acelea ar fi avantajoase din punctul de vedere al typing-ului, macar te lasa sa alegi dupa imprejurari."
Hmm, este adevarat ca termenul de limbaj dinamic este destul de vag, dar cred ca faci o confuzie intre limbajele dinamice si limbajele dinamic tipizate.
Am gasit pe Wikipedia o pagina despre limbajele dinamice, care nu stiu cat este de clara, dar poate ca ajuta:
http://en.wikipedia.org/wiki/Dynamic_pr ... g_language
Cand auzi de dinamic tipizat versus puternic tipizat sau strongly typed, se refera doar la posibilitatea ca o variabila sa accepte mai multe tipuri de valori, iar cand se face o distinctie intre limbajele statice si cele dinamice, se refera la posibilitatea modificarii dinamice a programului in timpul rularii, ceea ce permite o mai mare flexibilitate. Acel articol spune ca si in limbajele statice se poate face asa ceva, insa mai complicat, pe cand limbajele dinamice ofera mai multe facilitati in acest sens.
Oricum, in afara de programele mai complexe in care poate ajuta foarte mult faptul ca un limbaj este dinamic, cred ca daca un limbaj este puternic tipizat sau nu, static sau dinamic, are in general o importanta mai redusa decat faptul ca un limbaj este low level sau high level, or problema principala a limbajelor statice este aceea ca in general ele sunt mai low level, ceea ce implica scrierea de mai mult cod, adica mai multa munca, adica o productivitate mai mica.
Iar daca prin acele "limbaje care pot fi si statice si dinamice" te refereai la limbajele care pot fi si dinamic tipizate si puternic tipizate, adica care permit ca anumite entitati adica variabile sau atributele obiectelor sa poata avea orice tip de valoare, dar atunci cand se doreste sa poata accepta doar un anumit tip, Perl poate face acest lucru cand se definesc atributele obiectelor, si se pot impune orice conditii. Acest lucru este util nu in programe, care stiu ce valori trebuie sa primeasca, fiindca interfata prin care sunt introduse acele valori verifica asta, ci este util in module, care stiu ca trebuie sa opereze cu numere, sau doar numere intregi, sau doar string-uri, sau doar array-uri care contin numere etc, dar nu stiu in ce programe vor fi folosite si daca acele programe verifica validitatea datelor.