The name Euphoria is an acronym for 'End-User Programming with Hierarchical Objects for Robust Interpreted Applications'. It was originally released in July 1993 by Robert Craig (Rapid Deployment Software (http://www.rapideuphoria.com)) for the DOS operating system. Current versions support 32-bit DOS, Windows, and Linux. There is also a translator to convert Euphoria code into C for compilation to native machine code.
Euphoria is primarily used by hobbyists for utility and computer game programming, but has proven useful for fairly diverse purposes. The primary strength seems to be the ease of handling dynamic collections of data of various types, most useful when dealing with string processing and image processing, which can be quite difficult in many languages. It has been used in artificial intelligence experiments, the study of mathematics, for teaching programming, and to implement fonts involving thousands of characters.
As a brief example, the following code
global function replace( object old, object new, sequence group ) old = find( old, group ) if old then group = group[1..old - 1] & new & group[old + 1..length( group )] end if return( group ) end functionlooks for an old item in a group of items. If found, it replaces it with a new item. The group is then returned.
Simplicity is apparent in that the code clearly delineates it's constructs with words. Instead of braces, semicolons, and question marks, you see phrases like 'if..then', 'end if', and 'end function'.
Flexibility is present; the items 'old' and 'new' could be strings, numbers, images, or whole collections of data themselves. A different function for each data type isn't needed, nor does the programmer have to check the data types. This function will work with any sequence of data of any type, and requires no external libraries.
Safety is present due to the fact that there are no pointers involved and subscripts are automatically checked. Thus the function cannot access memory out-of-bounds, and cannot go beyond the end of the sequence or before the beginning of it to corrupt the memory. There is no need to explicitly allocate or deallocate memory, and no chance of a leak.
The line group = group[1..old - 1] & new & group[old + 1..length( group )]
shows some of the collection handling facilities. Collections of any type can be sliced ('slice' means to take a subset of the data in a collection) and concatenated in expressions, with no need for special functions.
Compare with:
Search Encyclopedia
|
Featured Article
|