Progetto e realizzazione di un linguaggio di programmazione per codice mobile


Candidato: Lorenzo Bettini

Relatore: Prof. Rocco De Nicola

Controrelatore: Prof. Pierluigi Crescenzi 


In questa tesi viene presentato X-Klaim, un linguaggio di programmazione per applicazioni distribuite con codice mobile. Con codice mobile si intende del software in grado di viaggiare su una rete eterogenea, e che può essere eseguito sul sito di destinazione. Il linguaggio X-Klaim (eXtended-Klaim) è un'estensione del kernel language Klaim, (Kernel Language for Agents Interactions and Mobility) che a sua volta estende Linda, un linguaggio di coordinamento per processi concorrenti; la comunicazione fra processi in Linda avviene tramite il tuple space, uno spazio di memoria condiviso. Un tuple space è una collezione di tuple, ed una tupla è una sequenza di campi istanziati (campi attuali) e campi da istanziare (campi formali). Per selezionare le tuple di un tuple space si utilizza il meccanismo del pattern matching: due tuple soddisfano il matching se hanno lo stesso numero di campi ed ogni campo soddisfa il matching col campo corrispondente (i due campi devono essere dello stesso tipo; due campi attuali devono essere uguali, cioè avere lo stesso valore, mentre un campo formale soddisfa sempre il matching con un altro campo dello stesso tipo). Dopo il matching i campi formali, diventeranno attuali, avendo lo stesso valore dei campi corrispettivi della tupla con cui è stato effettuato il matching. Linda si rivela insufficiente per applicazioni distribuite, in quanto tutte le tuple vengono mischiate in un unico tuple space.

Klaim gestisce spazi delle tuple multipli distribuiti, contenuti nei nodi della rete, a cui si può accedere specificandone la località. Si distingue fra località fisiche (gli indirizzi effettivi dei nodi all'interno della rete) e località logiche (nomi simbolici per riferirsi ai nodi). Le località logiche vengono tradotte nelle effettive località fisiche tramite gli ambienti di valutazione, adottando lo scoping statico (sfruttando cioè l'ambiente del nodo mittente) o lo scoping dinamico (sfruttando l'ambiente del nodo destinatario). In Klaim è possibile spedire agenti mobili su siti remoti, ed effettuare operazioni su tuple space remoti. X-Klaim aggiunge a Klaim le caratteristiche dei linguaggi di programmazione procedurali, che rendono la programmazione più semplice, ma non aggiunge potenza espressiva. La semantica di X-Klaim è stata data per traduzione in Klaim, e quindi quello che può essere programmato in X-Klaim può essere programmato anche in Klaim, ma con molte più operazioni.

I classici linguaggi di programmazione si rivelano spesso non adatti alle applicazioni distribuite con codice mobile, in quanto quest'ultime richiedono nuovi paradigmi di programmazione. Java mette a disposizione molte caratteristiche per la scrittura di applicazioni distribuite, essendo indipendente dall'architettura ed offrendo molte classi per la programmazione in rete. Ed infatti è stato utilizzato Java per realizzare l'infrastruttura per le primitive di Klaim: questa consiste di una libreria di classi, Klava (Klaim in Java), contenuta appunto nel package omonimo.

Un programma X-Klaim viene tradotto, tramite il compilatore xklaim (implementato coi tool lex e yacc), in un programma Java, che utilizza tale package. X-Klaim è un linguaggio ad un livello più alto rispetto a Java per le applicazioni distribuite, mettendo a disposizione a livello di sintassi le primitive per l'accesso agli spazi delle tuple distribuiti e alla gestione di agenti mobili; inoltre essendo un linguaggio Pascal-like molto semplice non richiede nozioni di programmazione ad oggetti, richieste invece per programmare in Java. Si può comunque ricorrere a Java (a Klava) quando si ha la necessità di personalizzare la gestione delle operazioni sui tuple space, derivando dalle classi del pacchetto Klava e ridefinendo opportuni metodi, secondo la filosofia della programmazione ad oggetti. Ovviamente, poiché i programmi scritti in X-Klaim saranno poi tradotti in Java, si ha la totale integrazione fra i due linguaggi. Il linguaggio X-Klaim rimane comunque indipendente dal linguaggio target, cioè in questo caso da Java.

X-Klaim permette inoltre di gestire i time out (che sono stati aggiunti a Klaim in questa tesi); questo è necessario nelle applicazioni distribuite per evitare di rimanere bloccati per troppo tempo, o per sempre, in attesa di tuple non presenti, oppure per la lentezza delle comunicazioni in rete. Si ha la possibilità di gestire una condizione di time out, eseguendo azioni alternative.