Julia



Introduzione          

Julia è un nuovo linguaggio open source dinamico comparso ad inizio 2012 ed orientato principalmente alla programmazione scientifica. Le alte prestazioni, molto spesso quasi paragonabili al C ed al Fortran, la possibilità di interoperare con altri linguaggi, gli stessi Fortan e C, la grande potenza nel suo ambito, sono alcuni tra i suoi punti di forza. Gli autori sono Jeff Bezanson, Stefan Karpinski, Viral Shah e Alan Edelman che, da utilizzatori di Mathlab, R ed altro software scientifico, hanno cercato di creare uno strumento che, partendo dalle loro esperienze, superasse i limiti e le debolezze riscontrate in altri linguaggi aventi le stesse finalità scientifiche. Più o meno tutti i language writers partono con queste motivazioni.
Julia è un linguaggio high level dinamico che si basa su di un JIT (Just In Time compiler) ad alte prestazioni appoggiato sul noto e potente framework LLVM. E' multiparadigma ed in particolare favorisce l'approccio procedurale e funzionale ma permette anche la metaprogrammazione. Gli autori hanno profondamente curato gli aspetti relativi alla precisione numerica, allo sfruttamento ottimale del parallelismo e da subito hanno cercato di sviluppare (in Julia stesso) le opportune librerie a supporto del linguaggio. Gli aspetti prestazionali sono stati assolutamente centrali durante tutte le fasi di sviluppo e sul sito ufficiale troverete molte comparazioni con altri strumenti analoghi. Da essi si evince come Julia sia leggermente inferiore solo al C++ ed al Fortran risultando però molto più facilmente utilizzabile rispetto agli altri due (ad essere sinceri altrove ho trovato qualche comparazione meno positiva, in particolare rispetto a Cython, ma si trattava di release di Julia decisamente primitive). Ottime premesse che, naturalmente, vanno confermate nella programmazione reale. I benchmark, molto interessanti, riferiti tra l'altro alle versioni di Julia ben lontane dall'essere la 1.0, sono reperibili direttamente sulla home page del progetto. Julia, come evidenziato sulla home page stessa, mette molta enfasi anche su altri importanti argomenti, in particolare quelli relativi al parallelismo, come detto e al cloud computing ques'ultimo è un ambito emergente al quale il nostro linguaggio si rivolge con molta enfasi. Un cenno la merita la sintassi che non prevede le quasi immancabili graffe, non obbliga indentazioni ne per lo più forza l'uso di punteggiature particolari e risulta nel complesso del tutto semplice ed intuitiva. A me ricorda un po' quella del linguaggio Falcon, in realtà sembra che Python e C siano state le fonti di ispirazioni principali.
Le finalità di questo linguaggio, per ora ovviamente ancora allo stato se non embrionale comunque ancora abbastanza primitivo sono chiare e le potenzialità molto interessanti. Da sottolineare che sebbene l'ambito prediletto sia quello scientifico o comunque numerico Julia sembrerebbe più che adatto anche al classico utilizzo general purpose.
Una rapida carrellata delle caratteristiche, alcune dell quali già accennate, è indicata qui di seguito, in buona parte ripresa dal sito ufficiale.

Supporta la tipizzazione dinamica ma è permesso anche specificare un tipo preciso per una variabile
Prevede il multiple dispatch, meccanismo in base al quale un metodo può essere condiviso tra più entità
Può richiamare direttamente funzioni C e, attraverso il package Pycall, funzioni Python.
E' stato pensare per favorire il parallelismo e la programmazione distribuita.
Supporta le coroutines, quindi la possibilità di avere thread "leggeri"
prevede la generazione automatica di codice ottimizzato per i vari tipi ivi compresi i tipi custom, definiti dallo sviluppatore.
Sono presenti molte potenti funzioni orientate alla gestione dei numeri ed alla matematica in generale
Ha un efficiente e completo supporto per Unicode.
Ha dei meccanismi che facilitano la metaprogrammazione.
E' pensato in funzione delle performance e dell'efficienza.
E' disponibile gratuitamente con licenza MIT.

La comunità che si è sviluppata in torno a questo strumento, il classico "ecosistema", è ancora piccola ma molto attiva e stanno comparendo numerose librerie per ottimizzarne ed allargarne lo spettro d'uso. La facilità con cui Julia può interagire con altri linguaggi è un altro degli aspetti salienti su cui gli autori sembrano aver puntato molto. In aggiunta e ad ulteriore conferma di questi aspetti va evidenziato che è previsto un comodo sistema di installazione automatica dei package aggiuntivi, meccanismo che ricorda, ad esempio, quello delle famose "gemme" di Ruby. Il sito ufficiale è già abbastanza ricco di documentazione e, cosa importante, questa mi pare ben organizzata, cosa assai importante se si vuole dare un minimo di utilizzabilità ad un nuovo linguaggio. I tool disponibili, vedi anche qui di seguito, sono già molto efficienti visto lo stadio ancora pienamente pre-alpha in cui si trova il linguaggio.
Seguiremo poco per volta gli sviluppi sia utilizzando l'efficiente interfaccia interattiva, sia compilando piccoli programmi.
Julia gira sui più comuni sistemi operativi ed è distribuito for free sotto licenza MIT
Consiglio anche di dare un'occhiata al sito relativo a Julia Studio, un IDE molto promettente e già utilizzabile per sviluppare le vostre applicazioni in questo linguaggio. Anche questo strumento ha l'interessante caratteristica di essere gratuito e i suoi autori collaborano strettamente col team di Julia.
Di seguito il solito saluto, stavolta tramite shell: Julia dispone, come accennato, di una console interattiva molto comoda per fare piccoli programmi di prova. Normalmente non amo le console ma in questo caso mi è sembrata così semplice ed immediata che ho deciso di farne uso in modo abbastanza intensivo (anche nella sezione riguardante Ruby mi sono comportato allo stesso modo). L'uso degli IDE può essere tranquillamente rimandato, almeno nelle prime fasi di studio ricordando tuttavia che JuliaStudio può essere usato in pratica come la console "accomodata"....

julia> print ("Hello, World")
Hello, World
julia>