(Premessa: ieri ho consegnato la tesi, di conseguenza il lavoro è sostanzialmente finito, e l’appello di laurea è confermato per il 20 dicembre; è ora di rispondere ad un po’ di richieste che ho ricevuto sull’argomento del mio elaborato, premesso che per una descrizione dettagliata del lavoro e le relative conclusioni dovrete venire alla mia laurea o a scelta aspettare i giorni successivi, quando pubblicherò il PDF)
Il progetto che verrà presentato il 20 dicembre ha avuto origine da una ricerca più ampia riguardante sistemi in grado di adattarsi a runtime al contesto all’interno del quale si trovano ad operare, e possano perciò modificare il proprio funzionamento, i servizi offerti ad eventuali client o il modo in cui sfruttano servizi a loro offerti in base a modifiche dell’ambiente o delle condizioni di funzionamento proprie dei sistemi stessi considerati. Due sono stati i settori di questa ricerca su cui il lavoro si è concentrato: il primo riguarda gli stili architetturali in grado di supportare questo paradigma, mentre il secondo riguarda i linguaggi di programmazione più adatti per sviluppare programmi di questo tipo.
Per quanto riguarda i primi, la condizione è che riescano a garantire scalabilità e ad isolare quelle parti del software che effettivamente possano richiedere un aggiornamento; l’esempio primo di architettura è REST, che essendo alla base del Web di oggi è evidentemente in grado di supportare uno scenario dinamico come quello di Internet, mentre l’esempio che segue immediatamente è Computational REST, una sorta di evoluzione del primo sviluppata da alcuni ricercatori presso l’Università della California presso Irvine, il quale riprende alcuni concetti di codice mobile e li integra in un’infrastruttura costruita sul protocollo HTTP, per costruire un Web in cui l’attenzione non sia più sul contenuto ma sulla computazione: per semplificare molto (forse troppo), da un certo punto di vista potreste vedere questa visione come un AJAX “on steroids“: invece di avere semplice codice Javascript che si muove nella Rete, ci sarebbe codice vero, scritto in linguaggi di programmazione “reali” e veramente eseguito dalle macchine…
Per i linguaggi, invece, una disamina dei più promettenti è stata fatta nell’articolo scritto per il corso di “Argomenti avanzati di Ingegneria del Software“, e tra i migliori è emerso Erlang, un linguaggio di programmazione funzionale orientato alla concorrenza: esso supporta non solo la creazione e gestione di migliaia di processi leggeri, distribuiti dinamicamente sui core di una singola macchina o addirittura tra macchine di una rete, ma permette anche l’aggiornamento dinamico del codice: un applicativo può infatti subire l’aggiornamento di uno o più moduli “a caldo”, senza dover fermare il servizio e senza che le istanze del codice precedente l’aggiornamento vengano fermate o in qualche modo disabilitate.
L’idea della tesi è stata quindi di mettere insieme l’architettura CREST, in origine sviluppata in Scheme, ed Erlang, e verificare se l’utilizzo di un linguaggio di programmazione in grado di offrire numerose facilitazioni sia per la comunicazione tra processi che per l’aggiornamento dinamico del codice avrebbe ben supportato tale architettura. Per i dettagli e le conclusioni sia sul linguaggio che sull’architettura, non posso anticiparvi nulla: vi aspetto a dicembre!
P.S.: dopo l’appello di laurea seguirà un secondo post con le conclusioni ed un paio di riflessioni personali sullo sviluppo di Internet, se non doveste farcela ad essere presenti vedrò comunque di soddisfare la curiosità che questo post vi dovrebbe lasciare…