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 |
Titolo: nuovi paradigmi di calcolo: linguaggi e modelli.
Responsabile della ricerca: Omodeo Eugenio
Indirizzo : Dipartimento di Matematica Pura ed Applicata
Qualifica: Professore Ordinario
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:
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.
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à:
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:
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).
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.
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.
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.
2 Metodologie di sviluppo del software
3 Modelli di calcolo