Seed7 |
|
Intro e Hello, World
Linguaggio particolare, interessante, sconosciuto ai più. Comparso sulla scena nel 2005, si tratta, evidentemente, di uno strumento di nicchia che probabilmente mai vedrà uno sviluppo ed una adozione in grande stile. Come ho già detto non sempre le buone idee ricevono la giusta accoglienza e il marketing e la spinta di grossi attori nel settore prevalgono, a volte, sulla qualità. Tuttavia ne propongo le basi in quanto si tratta di un qualche cosa molto interessante, con un approccio un po' diverso. Tra l'altro, anticipando una delle carateristiche principali, questo linguaggio vuole essere completamente cross-platform e magari può venire utile quando si deve costruire qualche cosa che abbia quella caratteristica e non ci si vuole rompere la testa con i problemi di traduzione da un sistema operativo all'altro. Questo perchè il codice gira indifferentemente su Windows, Linux e vari sistemi Unix like. Insomma, tenetelo nel cassetto, una volta o l'altra potrebbe essere il caso ringraziare il suo autore, l'austriaco Thomas Mertes. Il linguaggio fa la sua comparsa nel 2005, inizialmente il progetto, stando a quanto detto su Wikipedia, si chiamava Master. Si presenta come un linguaggio general purpose, multipiattaforma. Seed7 è:
- non esiste l'istruzione goto - non è supportato neppure il return - non sono previsti parametri di default - non sono previste parole chiave come self e this - non ci sono conversioni automatiche di tipo, bisogna ricorrere all'overload - non ci sono parole riservate(!) - non esiste distinzione concettuale tra operatori, funzioni, istruzioni e procedure - il meccanismo di chiamate procedurali è piuttosto particolare e non si basa su messaggi. Lo vedremo, ovviamente. Il linguaggio è principalmente usato tramite il suo interprete quindi non vengono prodotti eseguibili nativi per il sistema operativo sottostante. Tuttavia è presente anche un'opzione per generale eseguibili standard. Se vi è più comodo potete usarlo anche così. Ci sono poi altre caratteristiche peculiari che vedremo man mano che le incontreremo. Si tratta certamente di un linguaggio per molti versi innovativo. La sua origine e la sua sintassi sono influenzate solo in parte dai soliti C/C++ ma anche e forse maggiormente da ADA, Pascal e Modula-2. Anche in questo sta la sua originalità. Come detto si tratta di uno strumento di nicchia, per quanto ne so con un ecosistema intorno decisamente ridotto e, come tanti linguaggi, il suo sviluppo dipende principalmente, nei ritmi e nei contenuti, dall'entusiasmo e dalla "voglia" di una sola, per quanto geniale, persona. Tuttavia il progetto, mentre sto scrivendo (agosto 2012) è ben vivo e vegeto, l'autore ha idee ambiziose ed è decisamente imponente la mole di documentazione disponibile sul sito ufficiale. Insomma, come ho detto, merita almeno un'occhiata. La sua sintassi è particolarmente ricca, con un certo aspetto un po' retrò che riporta al Pascal e Ada (ma si, anche Delphi) e concettualmente tutto il linguaggio pare un po' fuori dagli schemi a guardarlo bene, forse sovrabbondante in alcune cose. Bisogna vedere se questi aspetti vi attirano o no... Seed7 è distribuito con licenza GPL e LPGL (per quanto concerne il runtime). Per ora ci salutiamo come al solito, ma non senza entrare subito nel merito del linguaggio:
Riga 1 - abbiamo la chiamata alla libreria standard. Senza scendere per ora in dettaglio diciamo che è quasi sempre necessaria Riga 2 - Eccoci ad una riga "densa" di informazioni. La funzione main è dichiarata costante, quindi immutabile nel corso del programma, di tipo proc (non preoccupatevi per ora di capire ogni cosa, comunque proc indica evidentemente una "procedura") e in particolare ad essa viene attribuito valore di ritorno, in questo caso tale valore viene espresso per mezzo di un costrutto che si chiama func che è strutturato formalmente da una sequenza che inizia con begin e termina con end, ovvero l'esatto corrispondente di { e } dei linguaggi C-like, quindi ecco spiegate le righe 3 e 5. Il costrutto func restituisce un tipo base che nel nostro esempio, nulla essendo specificato, è void. La riga 4 invece introduce writeln, ovvero una const proc della libreria standard che espone in output una stringa, nel caso specifico il solito "hello world", che è delimitata da una coppia di doppi apici. Avete notato che le istruzioni devono essere chiuse dal ; (punto e virgola)? Per concludere ancora meglio ecco un saluto con un minimo di interattività:
Aggiungo, di passaggio, che alla riga 6 presentiamo la funzione di scrittura che non forza un "a capo" (write invece di writeln). Invece alla riga 7 presentiamo la funzione di lettura, readln e l'operatore di concatenazione delle stringhe &. Di tutto, ovviamente, riparleremo. Infine, se volete commentare i vostri programmi abbiamo due modalità: # il "cancelletto" introduce i commenti che teminano con il carattere EOLN, la fine della riga corrente insomma (*...*) all'interno della doppia coppia composta dalla tonda aperta + * e da * + tonda chiusa possiamo mettere commenti più ampi formattati anche su più righe. |