next up previous contents
Next: Il porting del compilatore Up: Il linguaggio Sather Previous: Il linguaggio Sather

Caratteristiche del linguaggio

Orientato agli oggetti
migliora la località del codice, rende il vari moduli che compongono un programma (oggetti) maggiormente indipendenti l'uno dall'altro, e più facilmente riutilizzabili.

Garbage collected
libera l'utente dalla necessità di occuparsi della gestione della memoria: quando un oggetto non è più accessibile viene automaticamente deallocato dal garbage collector .

Il garbage-collector contribuisce ad aumentare l'incapsulamento e l'indipendenza del codice, utilizzare una libreria di classi non richiede la conoscenza dei dettagli interni di allocazione e deallocazione di strutture (come invece succede in C++).

L'uso di un garbage-collector è sconsigliabile qualora si sviluppino programmi per sistemi in tempo reale, che debbono garantire tempi di esecuzione deterministici. Nel caso di Sather questo è vero solo parzialmente: a differenza di altri linguaggi garbage-collected , l'allocazione di memoria è molto più rara, e avviene sempre in modo esplicito (non si ha la continua creazione e distruzione di liste dei linguaggi tipo LISP). Per garantire tempi di risposta deterministici è sufficiente evitare di creare nuovi oggetti nelle zone critiche del codice.

Fortemente tipizzato
le variabili di Sather, come in Pascal, possono contenere solo dati del tipo del quale vengono dichiarate. In questo modo molti errori vengono rivelati dal compilatore e non in fase di esecuzione.

Gestione delle eccezioni
la gestione delle situazioni di errore avviene mediante il meccanismo delle eccezioni, in apposite sezioni del codice, permettendo di mantenere lineare e comprensibile il flusso principale del programma.

Semplicità
il manuale del linguaggio è lungo solamente trenta pagine, e si può imparare a programmare in Sather in poco più di quindici giorni.

Robustezza
Il linguaggio è progettato in modo da rendere meno probabili gli errori più comuni, per esempio, tutte le variabili e tutti gli oggetti vengono automaticamente inizializzati dal compilatore con valori standard.

Ogni metodo di una classe può essere irrobustito mediante l'inserimento di precondizioni (predicati che devono essere soddisfatti prima che il metodo venga eseguito), postcondizioni (predicati che devono essere soddisfatti dopo che il metodo è stato eseguito), e invarianti di classe (predicati che devono essere soddisfatti da qualunque istanza di quella classe).

È possibile far generare automaticamente al compilatore una serie di controlli a tempo di esecuzione, in grado di rivelare molti degli errori più comuni (accesso agli array fuori dai limiti, utilizzo di strutture dati non allocate). Il codice così generato è più lento (nel caso peggiore i tempi di computazione triplicano) ma non tanto da impedire di poter abilitare i controlli anche con programmi computazionalmente molto pesanti.

Efficienza
Con i controlli a tempo di esecuzione disabilitati, Sather è più lento del linguaggio C di circa il 5-10%. Confrontato con altri linguaggi orientati agli oggetti, in alcuni test preliminari si è dimostrato pari o migliore del linguaggio C++, e tre-quattro volte più veloce di Eiffel.

Compilatore evoluto
il compilatore si occupa di ricompilare solo le parti modificate tra una compilazione e l'altra, rendendo inutile l'utilizzo di strumenti come ``make'' e tenendo traccia automaticamente delle dipendenze tra i moduli.

Sather è un linguaggio molto recente, le specifiche della versione 1.0 del linguaggio risalgono al 14 Gennaio del 1994 [23], mentre la prima versione del linguaggio è del 1989. Sather è tuttora oggetto di ricerca: ne esiste una versione sperimentale per macchine parallelismo grossolano, pSather, e una per macchine a parallelismo fine, dpSather.



next up previous contents
Next: Il porting del compilatore Up: Il linguaggio Sather Previous: Il linguaggio Sather



Alex Cozzi
Fri Dec 8 19:08:26 MET 1995