SproutCore non è l’unica nuova tecnologia per sviluppatori che Apple avrebbe “adocchiato” e alla quale si sta interessando ma ci sarebbe anche l’architettura denominata LLVM, acronimo di “Low Level Virtual Machine”. Nel corso di una sessione del WWDC denominata “New Compiler Technology and Future Directions” è emerso che in Xcode 3.1 sono stati introdotti due compilatori GCC 4.2 e LLVM-GCC. Nel primo, sono stati migliorati vari aspetti concernenti la sicurezza e le performance complessive che – a detta di Apple – dovrebbero contribuire “a creare applicazioni migliori”. Il secondo è un progetto di ricerca curato da Chris Lattner dell’Università dell’Illinois e rilasciato in una versione 1.0 nel 2003. Si tratta di un progetto che ripensa le classiche modalità di funzionamento di un compilatore, permettendo la cosiddetta compilazione “Just-in-Time”, l’ottimizzazione cross-file (la possibilità di linkare e ottimizzare codice sorgente nei linguaggi più disparati, compilandoli nel bytecode LLVM), mettere a disposizione un’architettura modulare per la creazione di componenti con scarsa dipendenza gli uni dagli altri e integrarsi perfettamente con i vari tool per compilatori già esistenti.
Il progetto di Lattner ha attirato l’attenzione di Apple quando egli ha cominciato a porre alcune interessanti questioni riguardanti l’Object-C in una mailing-list curata dalla casa di Cupertino. Apple ha cominciato a contribuire al progetto LLVM dal 2005 finendo, in seguito, ad assumere a tempo pieno Mr. Lattner.
Lo scorso anno è stato lanciato uno specifico front-end C, C++, Objective C e Objective C++ denominato Clang e rilasciato con licenza open source BSD con l’obiettivo di creare un compilatore LLVM in grado di creare velocemente applicazioni eseguibili, usare poca memoria, effettuare la diagnostica delle espressioni, sfruttare un’architettura modulare basata su librerie e in grado di integrarsi efficacemente all’interno di un IDE come Xcode.
Oltre al progetto LLVM/Clang, il quale sfrutta un front-end parser sperimentale, Apple ha cominciato a integrare componenti LLVM nell’esistente GCC, creando un sistema ibrido che sfrutta la maturità del compilatore (in particolare del front-end parser) in accoppiata a componenti LLVM permettendo inedite e moderne tecniche di ottimizzazione del codice. Il progetto, conosciuto come LLVM-GCC, inserisce il codice ottimizzato della LLVM in GCC mettendo a disposizione tecniche di ottimizzazione non possibili con altri compilatori o con i componenti standard GCC.
LLVM-GCC è progettato per essere altamente compatibile con GCC in modo che gli sviluppatori possano usare da subito il nuovo compilatore e beneficiare dell’ottimizzazione del codice senza effettuare modifiche sostanziali al loro normale flusso di lavoro. A detta di chi avrebbe avuto modo di provarlo, LLVM-GCC “compila codice che risulta il 33% più veloce” rispetto al codice generato dal GCC.
Apple avrebbe usato LLVM nello stack OpenGL di Leopard, sfuttando il concetto di macchina virtuale per emulare caratteristiche non presenti sull’hardware di alcuni Mac. Il codice è interpretato ed eseguito in modalità JIT dalla CPU. A Cupertino non si sarebbero limitati ad usare LLVM nel Mac ma il suo utilizzo sarebbe stato usato anche nello sviluppo dell’iPhone. L’architettura modulare del progetto consente virtualmente di sfruttare hardware diverso come anche le CPU ARM (grazie alla collaborazione di Nokia) e quelle di PA Semi (la società produttrice di particolari processori acquisita da Apple qualche tempo addietro).
L’LLVM sembra giocherà un ruolo sempre più importante nei nuovi Mac, soprattutto in virtù dell’arrivo di nuove CPU multicore e multicpu che rendono sempre più problematico il ricorso all’aumento della frequenza di clock. Apple sta lavorando per spingere le nuove tecniche di compilazione anche nel campo della ricerca e nel mondo accademico oltre a collaborare con importanti partner (incluso il produttore di supercomputer Cray). I progetti, essendo open-source, permettono già da adesso di ipotizzare possibili sviluppi e benefici: debugging avanzato, velocità di compilazione sempre più elevata, maggior sicurezza, ottimizzazioni specifiche per particolari processori. Gli sviluppatori, insomma, potranno concentrarsi sempre più sulle applicazioni vere e proprie, anziché, ricorrere a tecniche di velocizzazione proprietarie e poco ortodosse.
[A cura di Mauro Notarianni]