Sather è un linguaggio di programmazione orientato agli oggetti. Nacque all'incirca nel 1990 all'International Computer Science Institute dell'Università della California, sviluppato da un gruppo internazionale guidato da Steve Omohundro. Supporta la garbage collection e la programmazione generica dei sottotipi. In origine si basava su Eiffel ma ora include anche caratteristiche di programmazione funzionale.
| Sather linguaggio di programmazione | |
|---|---|
| Autore | Steve Omohundro |
| Data di origine | 1990 |
| Ultima versione | 1.2.3 (7 luglio 2007) |
| Paradigmi | orientato agli oggetti, funzionale |
| Tipizzazione | statica, forte |
| Implementazione di riferimento | |
| Licenza | GNU GPL v3 |
| Sito web | www.gnu.org/software/sather/ |
| Modifica dati su Wikidata · Manuale | |
class HELLO_WORLD is main is #OUT+"Hello World\n"; end; end;
Alcuni commenti sul codice:
main è il punto principale di esecuzione per un programma. Può appartenere a qualunque classe, ma se questa non è MAIN, il nome della classe deve essere specificato con una opzione del compilatore.# è il simbolo del costruttore della classe. Chiama il metodo create della classe il cui nome è indicato subito dopo l'operatore. In questo esempio, è usato per creare ed inizializzare un oggetto della classe OUT, la classe per scrivere sullo standard output.+ è ridefinito dalla classe per appendere la stringa passata come argomento allo stream.+ sono syntactic sugar per chiamate di metodi. a + b è l'equivalente di a.plus(b). Gli usuali ordini di precedenza degli operatori aritmetici sono usati per risolvere l'ordine di chiamata dei metodi in formule complesse.Questo programma stampa i numeri da 1 a 10.
class MAIN is
main is
loop
i := 1.upto!(10);
#OUT + i + "\n";
end;
end;
end;
loop ... end è il costrutto preferito per cicli, anche se while e repeat-until sono disponibili. Nel costrutto possono essere usati uno o più iteratori, i cui nomi finiscono sempre con un punto esclamativo. (Questa convenzione è controllata dal compilatore del linguaggio.) upto! è un metodo della classe INT che accetta un argomento once, un argomento il cui valore non cambierà all'interno dell'iteratore. upto! potrebbe essere implementato col seguente codice.
upto!(once m:INT):SAME is
i: INT := self; -- inizializza i al valore di self,
-- che è l'intero per il quale il metodo è invocato.
loop
if i>m then
quit; -- Esci dal ciclo quando i è maggiore di m.
end;
yield i; -- Altrimenti use i come valore di ritorno e continua il ciclo.
i := i + 1; -- Incrementa il suo valore di 1.
end;
end;
L'informazione sul tipo di una variabile è indicata usando la sintassi post-fissa variable:CLASS. Il tipo della variabile può essere spesso dedotto ed è quindi una informazione opzionale, come in anInteger::=1. SAME è una pseudo-classe che si riferisce alla classe attuale.