Il primo rilascio di Euphoria è per opera di Robert Craig nel 1993; successivamente è stato implementato da Rapid Deployment Software con l'aiuto di diversi utilizzatori. E' stato utilizzato per giochi in ambiente DOS, ma anche per programmi con interfacce grafiche per Windows e Linux X Windows. Euphoria è un linguaggio interprete non interattivo, con possibilità di generare programmi eseguibili in linguaggio macchina.
Gli oggetti di Euphoria sono atomi e sequenze. Gli atomi sono numeri singoli, le sequenze sono insiemi di atomi; una stringa di caratteri è una sequenza di valori numerici, ognuno dei quali è la codifica ASCII di un carattere. Atomi sono, ad esempio:
3.1415, 0, -1e7, 'B' ('B' corrisponde al numero 65)
sequenze:
{5, {6}}, {{"joe", "slim"}, 52389, 97.25}, {}, "B"
Le sequenze sono delle matrici, ogni elemento, potendo essere sia atomo sia sequenza, rende possibile la creazione di matrici multidimensionali di strutture a "record", di stack, liste, alberi, ecc…
Gli operatori aritmetici e relazionali sono applicabili sia ad atomi sia a sequenze:
x = {5, 7 {1, 1}} + {10, 10, 20, 100} -- x diventa {15, 27, {101, 101}}
Esistono procedure e funzioni, queste possono restituire qualsiasi oggetto.
I tipi predefiniti sono: object, sequence, atom e integer; object può essere qualsiasi tipo, integer è ovviamente una dichiarazione per ottenere prestazioni migliori. I tipi definibili dall'utilizzatore sono di fatto delle funzioni che controllano la validità dell'oggetto tipizzato, il programma sottostante controlla se un numero è primo utilizzando una dichiarazione di tipo.
--Euphoria Programming Language version 2.3 constant VERO = 1 constant FALSO = 0 type primo(integer x) for i = 2 to floor(sqrt(x)) + 1 do if remainder (x,i) = 0 then return FALSO end if end for return VERO end type if primo(prompt_number("Immetti un numero intero ", {1, 9999})) then puts(1, "Numero primo") else puts(1, "Non numero primo") end if
Euphoria accetta anche funzioni ricorsive:
function fattor(integer n) if n = 0 then return 1 else return n * fattor(n -1) end if end function
Sono disponibili oltre dieci librerie "ufficiali" per estendere le funzioni native, fra di esse la gestione di un semplice, ma efficace Data Base, operazioni su stringhe, per la multimedialità e la gestione delle interfacce grafiche.
Euphoria è un linguaggio strutturato, ha una certa ambiguità data dall'accettare, nella dichiarazione di funzione, nomi di variabili coincidenti con nomi di funzioni (non tutti), "disabilitandone" il corretto funzionamento (length). Manca una gestione degli errori. Il linguaggio è facile da utilizzare ed è robusto grazie ai controlli di validità degli indici, delle variabili non utilizzate o non dichiarate; tuttavia cede alla tentazione di permettere istruzioni criptiche del tipo variabile op= operando per scrivere x *= 10 invece di x = x * 10.