Seed7

Seed7
linguaggio di programmazione
AutoreThomas Mertes
Data di origine2005
Ultima versione2023-01-30 (30 gennaio 2023)
Utilizzogeneral-purpose
ParadigmiMulti-Paradigma: Generica, Orientata agli oggetti, Imperativa, Strutturata
TipizzazioneForte
Estensioni comuni.sd7, .s7i
Influenzato daPascal, Modula-2, Ada, C, Java
Implementazione di riferimento
Sistema operativoMultipiattaforma
LicenzaGPL, LGPL (per la libreria di runtime)
Sito webseed7.sourceforge.net/

Seed7, è un linguaggio di programmazione general purpose, multi-paradigma, open source creato a partire dal 2005 dal programmatore austriaco Thomas Mertes. Si tratta di un progetto abbastanza particolare a partire dalle fonti di ispirazione che sono principalmente i linguaggi Pascal, Modula-2 e Ada oltre ai consueti C/C++ e Java. Questo porta ad una certa originalità sintattica. Certamente peculiare invece è la sua estendibilità, con la quale si intende la possibilità offerta al programmatore di estendere la sintassi del linguaggio costruendo degli operatori e dei tipi di dati personalizzati.

Caratteristiche

[modifica | modifica wikitesto]

Seed7 supporta i paradigmi di programmazione a oggetti e imperativo permettendo anche la programmazione generica. Inoltre è del tutto multi piattaforma in modo che il codice possa girare senza modifiche sui più comuni sistemi operativi Windows, Linux, Mac ecc. La portabilità è garantita dalle numerose librerie a corredo, circa 70 che coprono numerose aree quali grafica, networking ecc, scritte con la portabilità tra gli obiettivi irrinunciabili. Sintetizzando per punti possiamo dire che:

  • è un linguaggio multiparadigma
  • è multipiattaforma
  • è estensibile
  • il compilatore effettua il type check statico e non permette il cast automatico
  • vengono gestite automaticamente le eccezioni
  • sono presenti numerosi tipi predefiniti nativamente alcuni dei quali non comunissimi, tra gli altri array, set, struct, ma anche color, duration, time ecc...
  • è permesso l'overload di procedure, funzioni, operatori, istruzioni
  • il linguaggio è manipolato dall'interprete in una rappresentazione interna che viene eseguita direttamente sulla macchina ospite. In questo senso non esiste una macchina virtuale in mezzo. È disponibile comunque la possibilità di generare direttamente degli eseguibili.

Di contro vengono eliminati concetti e istruzioni che l'autore giudica obsoleti ad esempio le istruzioni goto e return, operatori quali self e this, viene eliminato il concetto di parametri di default e altro ancora.

Il progetto è tuttora attivamente in corso di sviluppo, sia pure con un ridotto ecosistema. L'autore ha messo a disposizione una documentazione on line molto ampia. È possibile inoltre ottenere supporto tramite mailing list. L'ultima versione risale al 10 aprile 2022. Il linguaggio è disponibile sotto licenza GPL (LGPL per il runtime).

Il seguente esempio propone il classico "Hello, World!":

  $ include "seed7_05.s7i";      const proc: main is func       begin         writeln("hello world");       end func; 

come esempio appena più complesso ma abbastanza significativo per quanto riguarda l'aspetto del linguaggio di seguito un programma di conversione da gradi Fahrenheit a gradi Celsius

    $ include "seed7_05.s7i";       include "float.s7i";      const proc: main is func       local         const integer: lower is 0;         const integer: upper is 300;         const integer: increment is 20;         var integer: fahr is 0;         var float: celsius is 0.0;       begin         for fahr range lower to upper step increment do           celsius := flt(5 * (fahr - 32)) / 9.0;           writeln(fahr lpad 3 <& " " <& celsius digits 2 lpad 6);         end for;       end func; 

Seed7 nasce da un progetto accademico del suo autore chiamato Master. Successivamente venne creato un interprete, chiamato HAL, per il linguaggio. Infine dalla fusione di questi due elementi si arrivò all'attuale Seed7.

Collegamenti esterni

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica