Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

Passato e futuro di Javascript

Si può dire che qualsiasi sviluppatore che ha avuto a che fare con il web, e non solo, abbia conosciuto con quella meraviglia di linguaggio che è Javascript. 

Breve storia di Javascript

Javascript nacque nel 1995 come modulo di Netscape da un'idea di Brendan Eich (per chi fosse amante delle curiosità, Brendan scrisse Mocha, il primo nome di Javascript, in soli 10 giorni). Circa un anno dopo l'idea fu ripresa (o piuttosto reverse-engineered) da Microsoft la quale creò JScript e lo integrò con l'Internet Explorer di Windows 95.

Javascript acquistò subito molta popolarità tra gli "scripters", sia professionisti che amatori, perchè era semplice e permetteva di inserire linee di programmazione direttamente nelle pagine html senza necessità di compilazione. Questa caratteristica lo rendeva automaticamente portabile su tutti i sistemi operativi che possedevano un browser compatibile. 

Per molti anni la popolarità di Javascript crebbe a ritmo costante ma in modo blando, fino a quando, con le prime versioni dei motori JIT, ci fu il vero boom.

Il problema di Javascript era la sua lentezza. I motori del tempo compilavano il codice javascript in byte-code per poi interpretarlo, ma questo processo, eseguito al caricamento della pagina, era tutt'altro che efficiente. 

Il primo ad utilizzare un compilatore "Just In Time", che riusciva efficientemente a trasformare il byte-code in linguaggio macchina, fu TraceMonkey, rilasciato nel 2009 da Mozilla nella versione 3.5 del suo browser. Immediatamente dopo arrivò il famoso V8, il motore di Google Chrome. 

L'introduzione dei compilatori "Just In Time", e l'aumento della potenza dei processori hanno accompagnato la grande esplosione nell'uso di JavaScript degli ultimi 5 anni.

Per cosa è utilizzato Javascript

Nelle moderne tecnologie per lo sviluppo software, poco è rimasto nel quale non sia coinvolto Javascript. 

Javascript lato server

Difficile non aver mai sentito nominare Node.js.

Basato proprio su V8 e disegnato per lo sviluppo di applicazioni internet scalabili scritte in Javascript, Node.js è incredibilmente efficiente e la sua popolarità è in rapida crescita.

Per questo ambiente esistono vari framewrok di sviluppo.

Tra tutti, una menzione particolare va a Meteor. Vi consiglio di spendere qualche minuto per guardare il video dimostrativo, e vi assicuro che rimarrete affascinati dal suo nuovo modo di intendere lo sviluppo di applicazioni web. E' utile anche sapere che il progetto ha ricevuto finanziamenti per 11 milioni di dollari. Con un biglietto di visita del genere ne risentiremo sicuramente parlare.

Architettura MVC

Se si parla di pattern MVC applicato a Javascript non si non citare Backbone.js, una libreria sorprendentemente compatta e veloce per lo sviluppo MVC. Backbone offre componenti per implementare Modelli, Viste (usate anche come controllers), Routers e Collezioni.

Impressionante anche il più recente e potentissimo AngularJs (interessante la definizione di MVW come pattern architetturale implementato dal framework, acronimo per "Model, View, Whatever works for you").

Sviluppo di app per smartphone

Non c'è che l'imbarazzo della scelta. Il più gettonato al momento sembra essere PhoneGap, un framework di sviluppo che permette di creare applicazioni ibride per smartphones (metà web, metà codice nativo) usando html5, javascript e CSS3. Per raggiungere questo scopo, viene utilizzato il componente "WebView" del corrispettivo sistema operativo, che sia iOS, Android o BlackBerry OS. Qui potete trovare una piccola demo ed il link al codice sorgente.

Una delle principali alternative è Appcelerator Titanium, il quale invece di utilizzare una webview compila il codice javascript generando codice nativo. 

I vantaggi di utilizzare Javascript per lo sviluppo di app per smartphone sono la possibilità di sfruttare la propria conoscenza degli strumenti per lo sviluppo per il web senza dover imparare una nuova architettura per ogni tipo di smartphone, e lo "write once run anywhere" che sentiamo da anni, fin da quando ci fu proposto da Sun Microsystem per promuovere i benefici dello sviluppo multi-piattaforma di Java.

Gli svantaggi sono un pò di velocità in meno e la difficoltà nell'utilizzo degli elementi GUI nativi. Il contrasto tra vantaggi e svantaggi dello sviluppo di applicazioni HTML5 per smartphone è interessante e controverso, e offre spunti per interessanti discussioni.

Grafica 3d

La maggiorparte dei web browsers oggi supporta WebGL, una API Javascript per visualizzare grafica 3D. Il vantaggio di WebGL è che può interfacciarsi direttamente con la scheda grafica del PC ed utilizzare la sua accelerazione grafica.

Ad oggi, non è possibile garantire che la vostra applicazione WebGL funzioni per tutti i vostri utenti, e probabilmente sarà sempre difficile farlo. WebGL dipende infatti dalla corretta installazione dei driver grafici, e dalla loro compatibilità con il browser. Ad oggi, Google Chrome è l'unico in grado di offrire un meccanismo di fallback che sostituisca WebGL con un renderer software interno..

Malgrado non sia ancora pronto per il grande pubblico, WebGL ha visto vari progetti interessanti, tra cui la cripta Unigine, (Unigine è un motore multi-piattaforma per lo sviluppo di giochi 3D), e soprattutto il porting in Javascript di Unreal Engine 3:

Test Driven Development

La larga diffusione e l'aumento delle dimensioni scritte con Javascript ha fatto in modo che spuntassero varie librerie per l'automatizzazione dei test. QUnit è presente sul web già da un pò di tempo. Tra quelli che si stanno affacciando, troviamo Jasmine, il quale implementa il nuovo Behavioural Driven Development, di gran moda, e Mocha

Gestione dello storage

Ebbene si, con Javascript si possono creare e gestire anche dei database. Oramai quasi tutti i browser offrono delle funzionalità di Web Storage. Si potrebbe concludere che persino la programmazione Sql è possibile con Javascript, se non fosse che lo standard Web Sql Database, uno standard per la gestione di database sul web basato sullo splendido SqlLite, è stato deprecato da W3C in favore di Indexed Database API, meno sql oriented, ma più efficiente. Oltre a IndexedDB esistono altri modi di gestire lo storage naturalmente, e gli standard sono in continua evoluzione.

Conclusioni

Javascript oramai è inserito in modo endemico nelle architetture di sviluppo. Adobe Flash stesso lo ha adottato con il suo ActionScript. I suoi svantaggi, il fatto di non essere type safe, la sua natura asincrona, non sembrano essere un freno alla comunità la quale ogni giorno sforna soluzioni e librerie per renderlo sempre più efficente anche in presenza di architetture complesse (non ho parlato di JSLint ad esempio).

In questo post ho scalfito solo la superficie di cosa gira attorno a questo linguaggio, ogni argomento trattato meriterebbe un approfondimento.

Chiudo con il contenuto dell'ultima slide della presentazione "The State Of Javascript", tenuta dal già citato Brendan Eich a BrasilJS 2012:

Scommettete sempre su Javascript:
- Prima hanno detto che non era utile per sviluppare "Rich Internet Applications"
- Poi hanno detto che non avrebbe mai potuto essere veloce
- Poi hanno detto che nessuno avrebbe mai corretto i suoi bug
- Poi hanno detto che non avrebbe mai potuto sfruttare i MultiCore e i processori grafici

Sbagliato ogni volta...

Comments