AmigaE (see http://wouter.fov120.com/e/index.html) is a programming language by WouterVanOortmerssen, who is possibly the most prolific language designer on this planet (see http://wouter.fov120.com/proglang/index.html).
Although there exists a theoretical platform-independent language specification called E, it has only been implemented for one platform (AmigaDos, for which the implementation is called AmigaE). AmigaE was developed gradually between 1991 and 1997, after which development essentially ceased.
Despite being abandoned about 7 years ago, it's elegantly simple design & easily readable syntax still make it stand out today as an example of what programming languages '''should''' be like. One of it's best features is it's brutally simple OOP model, which still manages to provide pretty much all the useful features of OOP (and none of the traditional cruft); this also makes it ideal for learning OOP.
You can imagine it as having the readable syntax of Pascal, the low-level features of C, some of the high-level features of Lisp, and the elegant simplicity of Java. In more depth:
* Reference semantics, like Java, thus avoiding tons of tedious dereferencing & referencing seen in C (and even more in CeePlusPlus).
* It has hardly any type system, which may sound like a downside, but anyone experienced with fighting CeePlusPlus's type system will find this a relief. This feature allows low-level polymorphism.
* Many unnecessary features are either missing or have a sensible default (in stark contrast to CeePlusPlus which has every unnecessary feature but no sensible defaults).
* A good exception handling system, which avoid the complexities seen in Java and CeePlusPlus.
* Multiple return values, which avoids much of the need to pass pointers as parameters for returning values (unlike C).
* Default parameters, which makes it trivial to extend procedures/methods without breaking any existing code. Java really should have had this.
* No overloading, because overloading is only syntactic sugar, and can easily be misused.
* Sensible modularization system, which is neither as annoyingly strict as Java's, nor as overly complex as CeePlusPlus's.
* lots more....
Something that AmigaE shows is that what a language leaves out is just as important as what it includes; unnecessary features make a language harder to use, the source code harder to understand, and it more likely to be abused by a poor (or lazy) programmer. In this respect Java is very much following in the footsteps of AmigaE (albeit unintentionally).
Being so old, AmigaE is not without it's flaws (all of which could easily be fixed):
* The type system is virtually non-existent; it could be greatly tightened without breaking most existing code.
* The OOP system lacks interfaces & generics; there is no reason these cannot be added simply.
* The OOP system has PUBLIC & PRIVATE, but lacks PROTECTED.
* The constants system is rather basic, but there are many ways this could be changed.
I will write more if people are interested.
-- ChrisHandley
''Do you have some good references for places where examples of Amiga E code can be found? Maybe add an entry to HelloWorldInManyProgrammingLanguages?''
Entry added as suggested!
There is a ''ton'' of AmigaE code freely available from the Aminet (http://de.aminet.net/aminet/dirs/dev_e.html), but '''unfortunately''' 99.9 percent of this code is either (a) before OOP was added to AmigaE, (b) tiny ultra-specific classes that are of no use to anybody, or (c) written by people who really don't understand OOP (so what's new?:-) .
So sadly, there is a total utter lack of any useful OOP classes for free, which basically means you'll have to write your own at the moment. At some point in the future I hope to change that myself.
I could make available my now obsolete (and not very good) linked-list class as a big example of AmigaE code, but it is at the stage where it is too big to easily maintain, so that I don't know how useful it'd really be... A quick check shows it is 500 lines of code.
-- Chris Handley