Vine per la sintaxi, queda per la velocitat

Quan es tracta de modelització climàtica, cada segon computacional compta. Dissenyats per tenir en compte l’aire, la terra, el sol i el mar, i la complexa física que els uneix, aquests models poden funcionar amb milions de línies de codi, que s’executen als ordinadors més potents del món. Així, quan els codificadors-climatòlegs de la Climate Modeling Alliance (CliMA), una coalició de científics, enginyers i matemàtics amb seu als Estats Units, es van proposar construir un model des de la base, van optar per un llenguatge que pogués cobrir les seves necessitats. Van optar per la Júlia.

Llançat el 2012, Julia és un llenguatge de codi obert que combina la interactivitat i la sintaxi dels llenguatges de ‘scripting’, com Python, Matlab i R, amb la velocitat dels llenguatges ‘compilats’ com Fortran i C.

Entre els científics del clima, la llengua franca és Fortran: ràpid, però, amb arrels que es remunten a la dècada de 1950, no és gaire emocionant. “Molta gent, quan escolta ‘Fortran’, diu: ‘Oh, Déu meu, no vull programar en això'”, diu Frank Giraldo, matemàtic de la Naval Postgraduate School de Monterey, Califòrnia. i un co-investigador principal del projecte CliMA. Els programadors més joves prefereixen llenguatges que puguin adaptar-se a les últimes tendències en disseny de programari i maquinari, diu Giraldo, i des que va adoptar Julia ha vist un augment d’interès. “Alguns d’ells estan realment interessats en la modelització del clima, però d’altres estan intrigats per la idea d’utilitzar Julia per a alguna aplicació a gran escala”, diu.

Jane Herriman, que estudia ciència de materials a l’Institut Tecnològic de Califòrnia a Pasadena, diu que ha vist execucions deu vegades més ràpides des que va reescriure els seus codis Python a Julia. Michael Stumpf, biòleg de sistemes i proselititzador de Julia a la Universitat de Melbourne, Austràlia, que ha portat models computacionals de R, ha vist una millora de 800 vegades. “Pots fer coses en una hora que, d’altra manera, trigarien setmanes o mesos”, diu.

Aquesta acceleració, combinada amb la sintaxi fàcil d’utilitzar de Julia i la seva promesa d’abordar el “problema dels dos idiomes” (els investigadors sovint prototipen algorismes en un llenguatge fàcil d’utilitzar com Python, però després els han de reescriure en un llenguatge més ràpid) perfil de la llengua, especialment entre aquells que tracten problemes computacionalment intensius. A més de la modelització del clima, el llenguatge s’està adoptant en disciplines com la intel·ligència artificial, les finances i la bioinformàtica.

Segons Alan Edelman, un científic informàtic de l’Institut Tecnològic de Massachusetts de Cambridge que va co-crear Julia, el llenguatge s’ha descarregat uns 9 milions de vegades fins ara. Julia es troba ara entre els 50 llenguatges de programació més populars del món, segons un índex. Encara és relativament nínxol: l’índex del 2019 situa a Julia al 50è lloc i Python al tercer lloc, però té una base d’usuaris apassionada.

“La gent està cansada de reescriure el codi”, diu Edelman. “Estan cansats dels codis que enfosquin quina és la seva intenció, estan cansats que algun investigador o estudiant graduat o empleat escrigui codi i després passi a la seva propera feina i ningú sap què fer amb el seu codi. Aquestes són les persones que utilitzen Julia: persones que volen rendiment, portabilitat i flexibilitat.

El millor dels dos mons

Julia, el nom posa el “Ju” a “Jupyter”, un sistema de portàtils computacional popular entre els científics de dades, juntament amb Python i R, és essencialment un llenguatge compilat en roba de llenguatge de script. En llenguatges de script com Python, els usuaris escriuen codi en un editor interactiu línia per línia, i el llenguatge l’interpreta i executa, retornant el resultat immediatament. Amb llenguatges com C i Fortran, el codi s’ha de compilar en instruccions llegibles per màquina abans que es pugui executar. El primer és més fàcil d’utilitzar, però el segon produeix un codi més ràpid. Com a resultat, els programadors per als quals la velocitat compta sovint desenvolupen algorismes en llenguatges de script i després els tradueixen a C o Fortran, un procés laboriós i propens a errors.

Julia eludeix aquest problema de dos idiomes perquè funciona com C, però es llegeix com Python. I inclou funcions integrades per accelerar problemes computacionalment intensius, com ara la informàtica distribuïda, que d’altra manera requereixen diversos idiomes. (La informàtica distribuïda permet als programadors dividir problemes difícils entre diversos processadors i ordinadors.) Vijay Ivaturi, farmacòleg clínic quantitatiu de la Universitat de Maryland a Baltimore, va utilitzar Julia per crear una eina per personalitzar les decisions de dosificació de fàrmacs. El seu llenguatge anterior, Fortran, li va obligar a utilitzar diverses eines auxiliars. “Em vaig enamorar de la velocitat de la Júlia”, diu. “Però en general, crec que em vaig enamorar del fet que no he de canviar [language] eines per fer la meva feina: puc viure en un mateix entorn fins i tot.”

Els usuaris solen codificar a Julia mitjançant la consola REPL (read-avaluate-print loop), una interfície interactiva basada en text que pren l’entrada, l’avalua i retorna els resultats a l’usuari. (També poden utilitzar un editor de text de programació estàndard o el quadern Jupyter.) Segons sembla, utilitzar Julia és com codificar a Python: escriviu una línia, obteniu un resultat. Però en segon pla, el codi està compilat. En conseqüència, la primera vegada que s’introdueix una funció, pot ser que sigui lenta, però les execucions posteriors són més ràpides. I un cop el codi funciona correctament, els usuaris poden optimitzar-lo (vegeu “Començar”).

Segons Giraldo, una de les raons per les quals CliMA va seleccionar Julia per al seu treball va ser la seva actuació en un repte de codificació d’estil “bake-off” de Nadal contra C i Fortran, utilitzant Giraldo, llavors un novell de Julia, com a conillet d’índies. “El codi Julia, des de la caixa, estava realment a un parell per cent d’aquests codis Fortran altament optimitzats”, diu.

I és més fàcil de llegir, afegeix. Amb funcions com ara l’enviament múltiple (permet que diverses funcions tinguin el mateix nom) i la metaprogramació (programes que es poden modificar per si mateixos), el llenguatge posa l’accent en la simplicitat. Julia també admet símbols Unicode, la qual cosa permet als programadors utilitzar lletres gregues com a variables, en lloc d’equivalents romans. Això vol dir que poden escriure codi que s’assembla a les matemàtiques dels seus papers, amb VS = 2*π*rper a la circumferència d’un cercle, en lloc de VS= 2*pi*r. “Podríeu expressar les coses exactament com en pensa la vostra ment”, diu Edelman. “Vols que la màquina es doblegui a la teva voluntat, no que tu et doblis a la voluntat de la màquina”.

Ràpid, potent i fàcil

Michael Borregaard, investigador de biodiversitat de la Universitat de Copenhaguen, diu que Julia ha accelerat els seus codis en dos ordres de magnitud en comparació amb R, resultat tant de la velocitat computacional com de la claredat lingüística. “Codificar-lo a Julia va ser molt més fàcil per a mi refactoritzar-lo per velocitat o repensar com el vaig implementar per fer-lo més ràpid”, diu.

Per a George Tollefson, assistent d’investigació clínica a l’Hospital de Dones i Infants de Rhode Island a Providence, va ser la combinació de facilitat d’ús i potència computacional de Julia la que la va fer ideal per escriure un visor de dades per a grans conjunts de dades genòmiques. “La Julia era un llenguatge atractiu al principi perquè és molt ràpid i potent”, diu. “Però també és molt fàcil aprendre a escriure”. I té una comunitat de suport, afegeix Tollefson. Com que l’idioma té una base d’usuaris relativament petita, pot ser difícil trobar respostes en línia. Però les comunitats de desenvolupadors a Slack, Discourse i GitHub poden omplir el buit. “En alguns casos vam trobar que la gent no s’havia trobat amb el problema [we had]però ens van poder ajudar en mitja hora”, diu Stumpf.

Dit això, una base d’usuaris més petita també es tradueix en un ecosistema de paquets corresponentment més petit: la col·lecció de biblioteques de codi externes que els programadors utilitzen per estendre un llenguatge a noves disciplines. Segons Edelman, l’ecosistema Julia té més de 2.600 paquets, inclosos Flux (aprenentatge automàtic), BioJulia (anàlisi de seqüències d’ADN), DifferentialEquations (simulacions computacionals) i JuMP (modelació matemàtica). En comparació, el dipòsit del llenguatge CRAN R té més de 14.000 paquets i l’índex PyPI de Python supera els 187.000.

Els investigadors que necessiten biblioteques que no s’han traduït a Julia poden utilitzar el codi directament mitjançant paquets com Pycall (Python) i Rcall (R). Com a estudiant de grau a l’Institut Tecnològic de Massachusetts, Lydia Krasilnikova, ara estudiant de postgrau en informàtica a la Universitat de Harvard a Cambridge, Massachusetts, va crear un traductor Matlab-to-Julia, que està disponible en línia. “Molta gent m’ha enviat un missatge dient que el traductor va facilitar la seva transició i els va permetre provar el codi a Julia i retocar amb la seva base de codi existent d’una manera que abans no haurien pogut fer”, diu.

En definitiva, l’elecció de l’idioma es redueix a les preferències personals, els requisits del projecte i els vostres companys. En molts casos, qualsevol idioma servirà. Però pel que fa al “codi de rendiment”, diu Giraldo, “aleshores, sincerament, ara mateix veig que Julia és realment la millor opció. L’has de xuclar i simplement submergir-te. Realment no és tan difícil”.

Leave a Comment

Your email address will not be published. Required fields are marked *