ISTITUTO NAZIONALE DI ALTA MATEMATICA FRANCESCO SEVERI
CITTÀ UNIVERSITARIA. 00185 ROMA
http://Indam1.mat.uniroma1.it e-mail: ndam@indam1.mat.uniroma1.it
Tel. O6/490320 - 4440685 · Fax 4462293
Gruppo Nazionale per l'Informatica Matematica
50139 FIRENZE - Via S.Marta, 13/a
Telefono: +39 055 47.43.89
Fax: +39 055 47.25.03 / 47.59.15
Progetti di ricerca GNIM Progetti di ricerca GNIM


Titolo: nuovi paradigmi di calcolo: linguaggi e modelli.

Responsabile della ricerca: Omodeo Eugenio
Qualifica: Professore Ordinario

Indirizzo : Dipartimento di Matematica Pura ed Applicata
Via Vetoio, 1, 67100 L'Aquila
Tel: 0862-433151
Fax : 0864-433180
e-mail : omodeo@univaq.it

Durata della ricerca: 24 mesi.

Anno di inzio: 1999.

Finanziamenti richiesti (anno 1999).

Soggiorno di professori stranieri:

Organizzazione di conferenze:

Altre attività (missioni, workshop del progetto, ecc):


Totale:

Nuovi paradigmi di calcolo: linguaggi e modelli

Nuovi paradigmi di calcolo: linguaggi e modelli

La pervasività raggiunta dall'informatica in ogni risvolto della società, in ogni settore della realtà produttiva, è evidente; supera i piú visionari pronostici di trent'anni fa e -attraverso le reti- contribuisce a dare alla comunità scientifica quella formidabile coesione che è garanzia della stabilità dei suoi progressi. Tuttavia -causa, in parte, la rapidità di crescita del settore- l'informatica non ha ancora forgiato strumenti (concettuali, tecnologici) adeguati a tenere sotto controllo tutte le caratteristiche di qualità di un'applicazione complessa: correttezza, efficienza, praticità d'uso, affidabilità, sicurezza, ecc.

Da parte dell'informatico orientato alle applicazioni si richiede, oggi, da un lato la padronanza di una fitta trama di dettagli da cui dipendono il corretto funzionamento del software, la rapidità di esecuzione, l'amichevolezza verso l'utente. D'altro lato, si richiede la capacità di seguire un progetto dalla prima ideazione fino agli sviluppi `sul campo' con la visione unitaria che, sola, può assicurare la robustezza, la portabilità, la riusabilità e modificabilità del software a fronte di crescenti aspettative del mercato.

Lo sforzo cognitivo necessario a questo duplice controllo, sul dettaglio e sull'assieme, oltre che immane, è pericoloso; poiché, quando fallisce, rende costosa e precaria la maturazione dei prodotti informatici. Riteniamo che debba essere contrastato con una ricerca indirizzata su almeno tre fronti:

Su questi tre punti si articola la seguente proposta di un coordinamento delle attività di ricerca.

Vediamo con piú dettaglio tre problematiche che si intende affrontare.

1  Linguaggi dichiarativi

Una costante nella ricerca informatica -divenuta consapevolezza comune da un paio di decenni- è l'obiettivo di coniugare la dichiaratività con l'eseguibilità e, dove possibile, con l'efficienza.

Prima che penetrasse nella concezione dei linguaggi di programmazione, questa esigenza era soprattutto avvertita da chi si occupava di automazione del ragionamento o, piú precisamente, di fornire metodi di supporto automatico ai processi deduttivi. Le finalità della ricerca sul ragionamento automatico erano disparate: chi la intendeva tout court come un servizio da rendere all'attività matematica di derivazione formale di teoremi; chi vi intravedeva una via per giungere alla validazione del software, per esempio alla certificazione di correttezza degli algoritmi risolutivi rispetto alla specifica iniziale dei problemi; chi enfatizzava le analogie fra dimostrazione automatica dei teoremi e sintesi automatica dei programmi o elaborazione di piani d'azione; chi, infine, intendeva l'automazione dell'inferenza come un preliminare (meglio formalizzabile, e quindi con migliori e piú immediate prospettive di successo) all'emulazione di altrettanto sofisticate ma piú elusive attività della mente.

Senza che queste finalità si siano perse, ad esse è venuta ad affiancarsi negli anni `70 l'ambizione di poter sfruttare direttamente il metodo dimostrativo -sia pure in forme semplici e stilizzate- direttamente nell'esecuzione dei programmi. Alcuni vantaggi attesi dalla dichiaratività:

  • Ridotto divario fra: da un lato, descrizione (accurata, ma almeno in prima battuta ineseguibile) dei domini di un'applicazione, specifica formale dei problemi relativi a tale applicazione, caratterizzazione astratta di tipi di dato; da un altro lato, aspetti algoritmici ed implementativi, rappresentazione concreta delle strutture-dati.
  • Un piú generale corollario della concezione di un programma come oggetto simbolico (passibile, in quanto tale, di manipolazioni), sono le accresciute possibilità di automazione dei processi di trasformazione dei programmi. Fra le trasformazioni piú utilizzate, le tecniche di valutazione parziale.

  • Inerente parallelismo dei linguaggi dichiarativi e, per conseguenza, loro adattabilità alle evoluzioni tecnologiche in atto.

  • Facilità di realizzare forme di esecuzione controllata, tramite tecniche di metainterpretazione.

Non esiste un sistema di logica simbolica che possa essere considerato l'assoluto standard.

Una miriade di logiche impropriamente chiamate `non-classiche' sono state proposte per emulare forme specializzate di ragionamento (ragionamento deontico, epistemico, doxastico, ecc.), e fra queste molte hanno trovato un riscontro, e dunque possibilità di applicazione, nei problemi dell'intelligenza artificiale o nella verifica di sistemi software con caratteristiche particolari (le logiche temporali, per esempio, trovano applicazione nella verifica di sistemi concorrenti e reattivi). La logica intuizionistica, infine, attrae l'interesse di molti informatici per il rilievo particolare che assegna ai metodi costruttivi nelle dimostrazioni di esistenza.

Era inevitabile che la varietà di approcci sperimentata dalla logica simbolica si replicasse nel campo dei linguaggi di programmazione dichiarativa.

Oltre all' integrazione dei diversi approcci, due problematiche sembrano particolarmente vive attorno ai linguaggi di programmazione dichiarativa:

  • Forme avanzate e dinamiche di modularizzazione, largamente ispirate ai concetti (classi, metodi, gerarchie di ereditarietà fra classi, ecc.) dei linguaggi orientati agli oggetti, ma coerenti anche con le esigenze peculiari che nascono dalla dichiaratività del linguaggio (ad es. ragionamento condizionato) e dalle sue possibilità di integrarsi in modo semanticamente limpido con sistemi relazionali di gestione di basi di dati.
  • Disegno di linguaggi dichiarativi a vincoli. Con la programmazione logica con vincoli, grazie al ricorso di metodi specializzati (ad es. metodo del simplesso, unificazione booleana o insiemistica, trattamento di vincoli su domini finiti), si ottiene notevole risparmio nei tempi di esecuzione, un'espressione piú naturale e concisa dei problemi, e si ha inoltre la possibilità di ottenere risposte in forma implicita (e dunque piú compatta e intellegibile).

2  Metodologie di sviluppo del software

Il prossimo futuro nella produzione del software sarà legato allo sviluppo di applicazioni per reti eterogenee, con componenti mobili. Di questa tendenza sono testimoni/attori da una parte la sempre piú diffusa disponibilità di reti di comunicazione affidabili ed a larga banda e dall'altra l'enorme popolarità di applicazioni di nuova concezione su internet come il World Wide Web. Le nuove applicazioni saranno progettate tenendo sempre piú conto di due caratteristiche nuove: l'utilizzo di componenti software standardizzate (Commercial Off The Shelf) e la mobilità vuoi delle macchine, la cui connessione avviene via etere, vuoi di alcune componenti software, il cui codice si sposta sulla rete secondo le piú svariate necessità: dalla acquisizione dinamica di nuove funzionalità, ad esigenze di fault-tolerance.

Lo sviluppo di applicazioni per reti eterogenee con componenti mobili (nel seguito: software per reti) richiede l'utilizzo di tecniche di programmazione innovative. In particolare, nonostante la ovvia, ineliminabile eterogeneità dei sistemi di calcolo locali, dovrà essere possibile raggiungere un certo livello di integrazione e cooperazione tra nodi remoti in modo da permettere non solo lo scambio di dati, ma anche di codice e di processi in esecuzione, e l'accesso a basi di dati remote con differenti schemi concettuali. Tutto questo dovrà essere possibile con livelli di affidabilità, sicurezza e prestazioni molto superiori a quelli disponibili oggi.

Il problema con l'attuale software per reti, come illustrato nel prossimo paragrafo, nasce dal fatto che esso viene sviluppato in assenza di precisi paradigmi di riferimento per la progettazione e con strumenti di supporto di livello troppo basso. D'altro canto, queste applicazioni richiedono una qualità di servizio molto elevata, che si può ottenere solo se le migliori pratiche in uso per lo sviluppo di software vengono rese applicabili anche in questo dominio. Un coerente paradigma di programmazione è necessario per rendere possibile lo sviluppo di metodi e strumenti che favoriscano l'affidabilità e la sicurezza delle applicazioni, oltre che l'interoperabilità, la composizionalità e il riuso delle loro componenti.

È necessario ripensare in modo coordinato, e fin dall'inizio, l'approccio alla progettazione del software per reti, per render conto in modo efficace della sua caratteristica fondamentale e peculiare: il coordinamento di molti agenti largamente indipendenti e spesso mobili. Per fare questo è necessario considerare contemporaneamente metodi di sviluppo, verifica/convalida, e linguaggi di programmazione.

Il progetto ha come obiettivo generale l'avanzamento della conoscenza nel settore dello sviluppo del software per reti. Si intende quindi porre le basi teoriche, linguistiche e metodologiche di un approccio innovativo allo sviluppo del software per reti. Esso è basato su una visione globale e ad alto livello delle applicazioni che si intendono realizzare. I vantaggi dovrebbero riguardare sia la fase di progettazione architetturale, in cui vanno considerati solo gli aspetti essenziali delle componenti e delle loro interazioni, sia le fasi evolutive del ciclo di vita delle applicazioni, in cui facilità di coordinamento, mobilità ed open endness sono indispensabili. Caratteristiche del nostro approccio sono la possibilità di specifica e di verifica ad alto livello, sia statica che dinamica, sia funzionale che qualitativa, del software di rete, per garantire la qualità del servizio e la espressività dei linguaggi di programmazione, che devono permettere di implementare in modo naturale e sicuro il disegno architetturale. Altre caratteristiche importanti sono composizionalità ed estensibilità, per garantire la flessibilità e la facilità di riuso del software.

3  Modelli di calcolo

Con l'introduzione, sul finire degli anni 60, di sistemi operativi complessi per la multiprogrammazione si è imposto all'attenzione degli informatici il problema di gestire sistemi in cui diverse attività o procedono indipendentemente o cooperano ad un unico scopo, e perciò si trovano anche a competere per l'utilizzazione di risorse comuni. Contemporaneamente si è cominciato a concepire architetture hardware di piú processori per realizzare concretamente l'esecuzione contemporanea di piú attività.

Cercando quindi di isolare concetti che permettano di padroneggiare la complessità delle elaborazioni e di analizzarne il comportamento, si è capito che la concorrenza è uno dei principi alla base di un sistema informativo.

Si è cosí sviluppata l'elaborazione di modelli matematici per i sistemi concorrenti, preliminari per una definizione rigorosa della semantica e quindi del comportamento di un sistema informatico. Alle reti di Petri, storicamente il primo modello di grande interesse, si sono affiancati vari altri modelli basati su sistemi di transizione, costruttivamente specificati mediante sistemi di riscrittura, e modelli fondati su una visione strutturata dei processi come oggetti costruiti, a partire da processi ``semplici'', mediante un insieme di operazioni di base. A questi ultimi appartengono il CCS (Calculus of Communicating Systems) di Milner e il TCSP di Hoare. Come per il caso sequenziale, si è naturalmente posta l'esigenza di fornire, insieme con i modelli, metodi di prova di correttezza. L'idea alla base di CCS e di altre algebre di processi proposte è quella di fornire un calcolo per studiare le comunicazioni e le interazioni tra processi concorrenti. Una limitazione di questi calcoli è che la struttura di interconnessione dei processi è fissata rigidamente dalla struttura sintattica dei processi stessi e non consentono di descrivere sistemi mobili, ossia sistemi dove la struttura di interconnessione tra i processi può cambiare in modo dinamico. Si pensi al caso di una risorsa condivisa che può essere utilizzata da un solo processo alla volta, ma che può essere assegnata dinamicamente a tutti i processi che ne fanno richieste. Un altro esempio di mobilità è dato dalla migrazione di processi in cui i processi vengono scambiati tra i diversi processori del sistema. Al pi-calcolo la cui caratteristica di base è quella di consentire di esprimere che la topologia di comunicazione del sistema può cambiare per effetto della comunicazione di nomi di canali, si è recentemente affiancato l'Ambient Calculus basato su un concetto di mobilità degli ambienti. L'Ambient Calculus si pone cosí come modello candidato per descrivere le computazioni sulla rete.

Crescente è la diffusione di sistemi ``embedded'', ossia di sistemi di calcolo che formano una parte integrante di un sistema piú grande (un'automobile, un aereoplano, un utensile di casa) determinandone la funzionalità. Il sistema embedded deve reagire a stimoli di sensori e mandare segnali ad attuatori in tempo per non perdere nuovi stimoli che gli arrivino. Ci sono molte proposte di formalismi per ``sistemi reattivi'' che vanno sotto il nome di linguaggi sincroni.

Infine sistemi con vincoli temporali stringenti (real time) pongono il problema di trattare il tempo esplicitamente nelle descrizioni.

La ricerca che ci si propone riguarda lo studio di semantiche per i formalismi detti che siano adeguate a supportare specifiche di sistemi, verfiche formali di proprietà dei sistemi descritti, realizzazioni, e a sviluppare strumenti software di aiuto a tali scopi.