Nell'ormai lontano 1991 il mitico Wouter van Oortmerssen, appassionato sviluppatore di linguaggi e compilatori, decise di avviare un nuovo progetto, creare un linguaggio di programmazione avanzato, che consentisse al programmatore di scegliere il proprio paradigma di programmazione.
Decise di chiamare questo progetto: E, tenendo fede ad una vecchia tradizione informatica cominciata da Kernigam & Ritchie, i quali, agli inizi degli anni settanta, chiamamarono il loro linguaggio C, perché era un'evoluzione del B e del BCPL.
Il linguaggio E risente degli influssi dei più popolari linguaggi che lo hanno preceduto. Wouter si è principalmente ispirato a linguaggi come C++, Ada, Lisp, Pascal, Modula, ma anche a tanti altri. Proprio perché ha subito le influenze di questi linguaggi consente lo sviluppo delle applicazioni seguendo lo stile Object Oriented, Procedurale, e Funzionale Impuro, e rappresenta sulla piattaforma Amiga una piacevole eccezione.
Nel 1993, Wouter rilasciò come freeware la versione 2.1, e fu subito un gran successo, che il prolifico Wouter contraccambiò estendendo e migliorando il linguaggio, il compilatore e l'ambiente di sviluppo dotandolo anche di un potente debugger simbolico.
Così la comunità Amiga, solo un anno dopo, si è ritrovata per le mani la versione 3.0b, ormai matura tanto da divenire un prodotto commerciale, ed essere distribuita dallo stesso Wouter come shareware. Ciò che poteva sembrare una mossa azzardata, fu il calcio di inizio di una nuova era per questo linguaggio. Man mano sono stati tradotti ed adattati all'E tutti i sorgenti che corredano i Rom Kernal Manuals, bibbia dei programmatori Amiga, rendendo l'E un valido ed economico ambiente per lo sviluppo sulla nostra amata piattaforma, o per accostarsi alla programmazione orientata agli oggetti, senza spendere una cifra in compilari C++ commerciali.
E' attiva anche una mail list riservata a questo linguaggio, sulla quale è possibile trovare un nutrito manipolo di sostenitori dell'E, sempre pronti scambiarsi idee e consigli, a volte fa capolino lo stesso Wouter van Oortmerssen.
Come certamente molti sapranno è dal fallimento della Commodore che il futuro dell'Amiga è incerto, e non passa settimana senza che si susseguano colpi di scena da cardiopalma, degni di una soapopera. Questo clima non ha certo giovato, e man mano si è assistito all'abbandono più o meno ufficiale di programmatori e softwarehouse, sfortunatamente anche Wouter ha deciso di non spendere altre energie nel sviluppare ulteriormente il linguaggio, anche perché il compilatore è ormai stabile, e con pochissimi bug, che tutti conoscono ed evitano, ed ormai farne la manuntenzione è estremamante difficile, visto che il compilatore è stato interamente scritto in assembly, e come ammette l'autore stesso, è privo di commenti esplicativi, ed inoltre sta attualmente vagliando nuove strade per la progettazione ed implementazione di nuovi avveniristici linguaggi.
Questo triste annuncio è stato dato sulla E Mail List il 12 Marzo 1999 dallo stesso Wouter, quindi l'ultima versione ufficiale dell'E è la 3.3a, che può essere scaricata da un qualsiasi mirror di Aminet, e si trova nella directory dev/e.
Fortunatamente, in un'estremo atto di generosità e di riconoscenza verso la comunità Amiga, Wouter ha deciso di cambiare nuovamente status al programma, rendendolo nuovamente freeware, ed ha persino rilasciato i sorgenti, sempre su Aminet, in modo che qualche volentereroso possa aggiornare o eliminare i bug residui. Le prime migliorie non si sono fatte attendere a lungo. Tomasz Wiszkowski, a metà settembre, ha rilasciato la prima versione di CreativeE come giftware su Aminet. Si tratta di una miglioria del compilatore originale EC di Wouter van Oortmerssen, infatti sono state aggiunte solo delle nuove costanti, migliorato il preprocessore del linguaggio, una patch per ottimizzare il codice per diversi processori della famiglia 68x00, cosa prima non possibile, e nuove direttive di compilazione, ora è infatti possibile generale un oggetto linkabile, o privo di codice di startup, ottimo per creare handler per AmigaDOS.
Le modifiche, come è ovvio attendersi, hanno introdotto delle piccole incompatibilità, quelle note si riferiscono alla gestione dei comandi per la visualizzazione e formattazione delle variabili di tipo stringa, questo perché Tomasz ha preferito avvicinare la sintassi dell'E a quella del C.
Questo non è il solo progetto per l'evoluzione ed aggiornamento del compilatore, già da alcuni anni sulla Mail List, si discuteva dell'opportunità di scrivere, in un linguaggio ad alto livello come il C++ o l'E stesso, un nuovo compilatore, che potesse essere facilmente aggiornato o portato su altre piattaforme o generare codice anche per processori diversi dal canonico Motorola 68000, e così alla fine si è formato un manipolo di volenterosi che stanno lavorando ad un nuovo compilatore/traduttore da codice E a codice C++: Il lavoro è già a buon punto, ma per il momento, paradossalmente, non può girare su Amiga, in quanto si appoggia ad una versione sperimentale del complilatore C++ del gruppo GNU, non ancora disponibile su Amiga.
Nel corso di questo articolo ci riferiremo alla dotazione standard, liberamente scaricabile, e compressa nell'archivio ec33a.lha nella directory dev/e dei mirror di Aminet. L'intero kit, una volta scompattato, richiede poco meno di 5Mb di spazio su harddisk, ed eliminando un po' di esempi, documentazione, e utility non strettamente necessarie, è possibile installarlo anche su un paio di dischi da 880Kb, ma è ormai inconcepibile usare un computer senza un harddisk.
Nella directory BIN, in puro stile Unix, troviamo gli eseguibili che costituiscono l'ambiente di svilupppo:
Il pezzo forte è indubbiamente il compilatore detto EC. Un eseguibile di appena 86Kb nella versione 3.3a, in grado di tradurre al volo da E a codice macchina 68000 e di eseguire il linking. Stando ai dati ufficiali distribuiti da Wouter, il suo compilatore è in grado di raggiungere la velocità di 20000 linee di codice al minuto su una macchina con 68000 @ 7MHz.
AGSplit e AG2Txt, due utility scritte in E, che rispettivamente servono per dividere un documento in formato Amigaguide in documenti più piccoli, ciascuno formato da un singolo nodo, e per convertire il formato amigaguide nel formato testo classico, che può essere facilemente stampato.
Build, un clone della celeberrima utility make del gruppo GNU per compilatori C, ovvero serve per la compilazione ed il rispetto delle dipendenze di grossi progetti.
AProf, un profiler scritto da Michael G. Binz, ovvero un utility che serve per cronometrare ed analizzare i tempi di esecuzione delle subroutine, in modo da poter scoprire, e successivamente ottimizzare, le porzioni critiche e/o inefficienti del proprio codice.
EDBG, contrazione delle parale E Debug, è un'utility interamente scritta in E, con tanto di sorgente allegato, che consette di effettuare il debug delle proprie applicazioni, tenendo sott'occhio i contenuti delle variabili, memoria, e porzione del codice in esecuzione, ma questo non viene visualizzato come disassemblato 68000, ma come codice sorgente E, rendendo ancora più facile la rimozione dei bug.
Explorer, è un'utility, utilizzata da EDBG, per visualizzare il contenuto delle variabili.
EFindHit consente di trovare il numero di linea del codice E che provoca un Enforcer Hit, ovvero un accesso illegale alla memoria bassa dell'Amiga, rilevata dall'utility di debug Enforcer sviluppata da Michael Sinz.
EYacc, più che di un utility si tratta una chicca, che mostra come realizzare un traduttore da LEX a E. E' basato sui sorgenti dello Berkeley Yacc che sono Public Domain.
ShowCache, FlushCache consentono rispettivamente di visualizzare e liberare la cache utilizzata dal compilatore E. Ogni volta che il compilatore incontra un nuovo module, equivalente agli include del C/C++ o delle unit del Pascal, non fa altro che memorizzarlo temporaneamente in RAM, in modo che in seguito non debba più essere letto dal supporto magnetico, notoriamente più lento, questo, però, può dare qualche grattacapo se nella cache si trova una versione più vecchia di un modulo presente su disco, quindi è bene utilizzare con perizia questa funzione del compilatore.
ShowModule consente di visualizzare il contenuto (parziale) di un modulo, ovvero le definizioni delle costanti, e i nomi delle eventuali funzioni in esso presenti. Il suo output deve essere usato solo per effettuare verifiche, e non per bypassare l'inclusione del modulo.
Iconvert e Pragma2Module sono due utility che consentono di tradurre rispettivamente gli include dell'assembly e i pragma del SAS/C in moduli E. Queste utility sono destinate a programmatori esperti e smaliziati che necessitano aggiungere al kit il supporto di qualche libreria sviluppata da terze parti, e non ancora supportata ufficialmente dall'E.
O2M è molto simile alle precedenti, ma consente di tradurre una porzione di codice oggetto generato da un macroassemblatore in un modulo E.
Ovviamente il file .o, prodotto dal macroassemblatore, deve sottostare a delle rigide regole, ampiamente spiegate nella documentazione di questo comando.
A questo punto qualche lettore potrebbe chiedersi se valga la pena apprendere o usare un linguaggio non più supportato ufficialmente dal suo programmatore, questa è un'osservazione valida, ma al tempo stesso deve tener conto anche di altri aspetti, come il fatto che l'AmigaE è un linguaggio molto semplice da apprendere, o per cominciare ad avventurarsi nel mondo della programmazione ad oggetti, inoltre è disponibile su Aminet, ma in generale su Internet, una gran quantità di sorgenti commentati, o collezioni di moduli già belli e pronti, tra i quali spiccano per qualità e quantità le classi: Amiga Foundation Classes.
Questa classi forniscono al programmatore un'ampia collezione di oggetti per interagire con le strutture a basso livello di Amiga OS, come liste, porte messaggi, parsing degli argomenti, o per lo sviluppo rapido delle applicazioni, fornendo oggetti e metodi per gestire i file di configurazione in diversi formati, o dei requester di about con immagini come su MacOS o Windows, e tanto altro ancora. Ogni classe prima di essere rilasciata al pubblico viene approfonditamente testata non solo dal programmatore, ma anche dai supervisori del progetto, e viene corredata di esempi di utilizzo, in modo che chiunque in pochi minuti possa apprenderne il funzionamento, l'unico requisito necessario è un'infarinatura sulla programmazione ad oggetti.
Per maggiori informazioni o per prelevare l'archivio più aggiornato visitate il sito ufficiale delle Amiga Foundation Classes, sul quale si troveranno inoltre le istruzioni per iscriversi alla Mail List dedicata all'uso di tali classi.
In conclusione l'AmigaE è un ottimo linguaggio, soprattutto economico visto che è ormai freeware, per sviluppare sulla piattaforma Amiga, e, a testimonianza di ciò, si possono elencare diversi programmi, come Monsoon, Doopsi, e diverse utility per il pacchetto NewIcons 4.0.