Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
| | Caratteristiche
Rissumiamo le caratteristiche principali del linguaggio M2:
- M2 è un linguaggio compilato. Il risultato della compilazione
è un programma direttamente eseguibile dal computer.
- M2 è un linguaggio procedurale. Supporta le funzioni, le funzioni
nidificate, la ricorsione e dispone delle istruzioni di controllo del
flusso consuete (IF, FOR, WHILE, LOOP, ecc.).
- L'allocazione delle variabili e delle strutture dati è automatica.
Lo spazio occupato dai dati non più utilizzati dal programma viene
recuperato e riutilizzato.
- Le operazioni sugli array e sulle strutture dati dinamiche vengono
controllate a tempo di esecuzione per rilevare l'accesso a dati non
allocati e lo sforamento degli indici.
- I tipi di dati semplici sono: BOOLEAN, INTEGER,
REAL, STRING. Le stringhe possono avere lunghezza arbitraria
e possono contenere qualsiasi codice. Il linguaggio permette di manipolare
le stringhe, concatenarle, estrarne intervalli di caratteri definiti.
- I tipi di dato strutturati sono gli ARRAY e i RECORD.
Gli elementi degli array e i campi dei record possono a loro volta essere
dei tipi strutturati: si possono costruire array di array, array di record,
ecc. Lo spazio di memoria necessario viene allocato automanticamente non
appena di assegna un elemento di un array o un campo di un record. Gli array
hanno lunghezza dinamica e si estendono man mano che si assegnano nuovi
elementi.
- La dichiarazione TYPE permette di assegnare un nome a una nuova
struttura dati. La struttura dati viene creata sfruttando i tipi base
o altri tipi a suo tempo definiti.
- Le funzioni accettano argomenti in un numero e tipo definito dalla
loro dichiarazione. Non sono previste le funzioni con numero variabile
di argomenti.
- Le funzioni possono ritornare come valore un dato di tipo arbitrario,
sia semplice che strutturato.
- Il meccanismo della qualificazione dei nomi risolve il problema
delle collisioni nello spazio dei nomi tra oggetti omonimi esportati
da librerie diverse. La qualificazione dei nomi è facoltativa,
e diventa obbligatoria solo in caso di collisione.
- M2 supporta la notazione postfissa per invocare le funzioni: la
chiamata
f(x,y,z) può essere riscritta in modo
equivalente come x->f(y,z). Questa possibilità
ha interessanti conseguenze che vengono descritte.
- I moduli di libreria si articolano in un DEFINITION MODULE che ne
dichiara l'interfaccia, e in un IMPLEMENTATION MODULE che ne contiene
il codice. Il modulo di definizione è anche un testo luogo
deputato per contenere la documentazione utile per i suoi utilizzatori.
|