Durere și limbaje de programare
February 13th, 2008 Alex
Iubesc limbajele dinamice, și apreciez din ce în ce mai mult Python. Nu este atât de cool ca Ruby, dar își face mai bine treaba (d.p.m.d.v), fiind concis și bine documentat, iar bibliotecile și uneltele valabile sunt bestiale (vorbind de unelte bestiale, încearcă IPython - consolă python cu auto-completion, printre altele).
Mai mult decât atât, din experiență proprie pot afirma cu o oarecare certitudine că Python are cele mai multe și mai bune bindings-uri pentru biblioteci externe, neegalat momentan de restul plutonului, iar pentru bibliotecile unde stă mai prost (e.g. Aspell) există întotdeauna CTypes sau Boost.Python.
Limbajele dinamice sunt perfecte pentru exploratory programming, acolo unde specificațiile sau soluția problemei nu se cunosc. Și sincer să fiu, astfel de probleme sunt exact motivul pentru care am ales să fiu programator și încerc din răsputeri să stau departe de probleme ce au devenit o comoditate. Desigur, dacă vrei să rezolvi o problemă ce a fost deja rezolvată, cum ar fi să implementezi un shopping cart, poți oricând copia funcționalitățile unui sistem deja făcut, și-ți poți permite să creezi design-ul de la început, îți poți permite să adaugi pe parcurs constrângeri modulelor, îți poți permite să definești o ierarhie rigidă de clase, îți poți permite să folosești Java. Dar folosind un limbaj rigid ca Java pentru explorarea unei probleme nerezolvate este ca și când ți-ai alege cu atenție cămașa înainte de a pleca într-un safari … o pierdere de timp.
Dar limbaje ca C++ și ca Java nu pot fi evitate … lăsând la o parte așa zisa siguranță oferită de tipizarea variabilelor, late-binding-ul limbajelor dinamice suferă de performanță. Și până una-alta, dacă vrei performanță brută, și nu-ți poți permite să arunci bani asupra problemei (cum ar fi construirea unei ferme de calculatoare și paralelizarea prelucrării prin MapReduce), nu prea ai ce face și de voie/nevoie trebuie să folosești un limbaj static ce poate fi compilat într-un mod eficient.
Am descoperit Scala, un limbaj static cu o sintaxă flexibilă ce combină OOP-ul cu concepte funcționale, iar compilatorul poate genera bytecode Java sau dotNet. Cu alte cuvinte în Scala se pot refolosi biblioteci scrise în Java, fiind un limbaj pentru JVM.
Scala repară practic tot ce este în neregulă cu Java. De exemplu nu mai există diferențe între primitive și obiecte, tipul Int fiind o clasă normală, iar literarii integer fiind instanțe ale clasei Int. Scala mai este capabil de closures (cu o sintaxă mai flexibilă ca cea din Ruby, dar la fel de light). Iar multe elemente din syntactic-sugar-ul limbajului pot fi redefinite tot în Scala. De exemplu blocurile While ar putea fi definite astfel …
def WhileAlex (p: => Boolean) (s: => Unit) = {
if (p) { s; WhileAlex(p)(s) }
}
Iar noua construcție ar putea fi folosită la fel ca un while normal …
val i = 0
WhileAlex (i < 10) {
println(i)
i += 1
}
Deasemenea, că tot vorbeam de exploratory programming, Scala este capabil de type-inference (compilatorul își poate da seama de tipul unei variabile în majoritatea cazurilor fără asistența programatorului), printre alte bunătăți, cum ar fi pattern-matching, sau mixins (traits, cum sunt denumite în Scala), iar prin implicit conversion poți avea ceva similar cu extension-methods din C# 3.0, sau cu clasele deschise din Ruby. Iar cireașa de pe tort sunt bineînțeles Actorii din Scala, ce pot fi folosiți pentru programare concurentă folosind aceași paradigmă cu cea din Erlang.
Și am menționat oare că există și un framework web scris în Scala? Este în stadiu alpha, dar arată destul de bine;)
Singura problemă cu Scala este documentația oficială (un pic cam peste nivelul unui programator neobișnuit cu concepte funcționale). O bună introducere pentru programatori de Java am găsit însă aici: Roundup Scala for Java Refugees
Un alt blog ce tratează Scala ar mai fi: http://alblue.blogspot.com/search/label/scala
Bineînțeles, mai există Wiki, plus documentația oficială. Iar Scala poate fi downloadat de pe website-ul oficial.
Posted in compilers, scala, technology | 3 Comments »