Il mondo delle interfacce sta evolvendo rapidamente e negli ultimi anni abbiamo assistito a una nuova “speciazione” degli ambienti in ambito mobile (iOS di Apple, Android di Google, …), ma non si tratta solo di nuovi ambienti, ma anche di un nuovo modo di intendere l’interfaccia: niente più finestre da spostare col mouse, ma applicazioni a tutto schermo con cui interagire in touch. Qt ha dovuto sottoporsi ad un restyling interno per affrontare meglio le sfide del prossimo futuro e il risultato è Qt5. Vediamo le novità a qualche mese d’uscita dalla prima alpha.
Una volta il modo per interagire con il PC era uno solo: il mouse. Si punta, si trascina, si seleziona una delle cose da fare su uno schermo più o meno grande e si digita su una tastiera. Se è vero che il numero dei tablet venduti ogni mese supererà tra breve il numero di portatili allora vuol dire che questo mondo sta lentamente tramontando, almeno come interfaccia mainstream. Tanto è vero che se n’è accorta anche Microsoft, con il suo tipico ritardo, che con il suo imminente Windows 8 e la sua doppia interfaccia mobile/desktop non vuole arrivare con un ritardo troppo grande.
Qt è la libreria universale che dovrebbe permette lo sviluppo su ogni piattaforma, ma è storicamente legata principalmente a tre piattaforme: X11, Windows e MacOS. Sono tre piattaforme desktop con il tipico paradigma statico che abbiamo descritto prima, ma già da qualche tempo qualcosa è cambiato. Innanzitutto per volontà di Nokia è arrivato il porting per Symbian (e per MeeGo) che ha introdotto Qt Mobility per dare un’API alle funzionalità tipiche dei dispositivi mobile: geolocalizzazione, sensori e affini. Il problema era che il codice di Qt stava diventando la fiera dei comandi per il preprocessore C++ con una serie di condizionamenti in base alla piattaforma e bisognava decidersi a fare qualcosa.
Il codice è stato quindi pesantemente rimaneggiato per creare un’interfaccia astratta tutto la quale si va a posizionare il codice per il singolo porting. Questa struttura rende infinitamente più semplice il porting verso nuove piattaforme perché non è più necessario andare a patchare il codice dove serve per adattarsi alla piattaforma, ma basta implementare l’interfaccia astratta. I porting verso Android, iOS e tutto quello che eventualmente il futuro ci riserverà sarà quindi molto più rapido ed efficace. Probabilmente questo passo andava fatto già molto tempo fa, ma purtroppo gli interventi pesanti sono quelli che richiedono anche più tempo.
Assieme a questo layer astratto per le piattaforme gli sviluppatori hanno deciso che era giunto il momento di rivisitare anche la struttura del codice per renderlo più scalabile alla luce del fatto che difficilmente un programmatore ha bisogno di tutte le funzionalità di Qt e che quindi è necessaria una maggiore modularizzazione del codice. Non è più sufficiente avere semplicemente delle classi divise in moduli in base alla funzionalità, ma serviva un approccio più aggressivo che riducesse il core all’osso e suddividesse tutto il resto in una serie di moduli. L’esempio principe è la questione dei QWidget ora utilizzati in sostanza solo dalle interfacce desktop. Pulsanti, campi di testo e così via appartengono a questo mondo ed è inutile averli nel core. Separando in questo modo netto il codice diventa più gestibile e lo sviluppo dovrebbe beneficiarne.
Ma dicevamo dell’interfaccia e a questo proposito esiste già da tempo Qt Quick che consente la realizzazione di applicazioni orientate all’interfaccia grafica interattiva in modo pratico e sfruttando Javascript e QML. Qt5 include il celebre motore Javascript V8 di Google che permette prestazioni di alto livello, indispensabili in applicazioni Javascript-centriche come quelle di Qt Quick. Lo sviluppo di Qt è praticamente concentrato su questo aspetto perché tanto i widget classici hanno ormai raggiunto una maturità tale da necessitare pochissimi interventi.
Nella stessa direzione va anche l’ultima novità sostanziale di Qt5: la rivisitazione dello stack grafico di Qt Quick. Questo sarà basato su OpenGL ES 2.0 per sfruttare sempre l’accelerazione hardware offerta dalla ormai totalità degli apparecchi mobile proprio perché per essi è importante dare all’utente un’esperienza visiva di primo livello per renderne l’uso il più confortabile possibile. Basti pensare al fatto che in Windows Phone il processo che sovraintende il rendering grafico è quello privilegiato.
Queste sono le novità di rilievo di Qt5 a cui si accompagnano una serie di miglioramenti e ottimizzazioni, come per esempio l’adozione, dove possibile, dello standard C++11. Particolare attenzione è stata posta nel fare le cose in modo da rendere la migrazione da Qt4 a Qt5 la più semplice possibile. Memori del disastro del passaggio da Qt3 a Qt4 si è cercata di mantenere la massima compatibilità possibile coi vecchi codici, minimizzando quindi i casi in cui sono necessari grandi interventi.
Ci vorrà ancora del tempo prima di vedere Qt5 pronto per l’ambiente di produzione visto che al momento ci troviamo ancora nelle fase di alpha e quindi sono ancora in corso modifiche pesanti al codice e a come questo espone le varie funzionalità. L’entusiasmo che però continua ad esserci attorno al progetto visto anche il passaggio all’open governance lascia ben sperare per il futuro!