Est. 1993 Intermediate

AmigaE

Wouter van Oortmerssen's Amiga E — a fast, loosely typed systems language written as one enormous 68000 assembly source file, mixing procedural code with objects, exceptions, Lisp cells and unification, and one of the most popular ways to program the Amiga in the 1990s.

Created by Wouter van Oortmerssen

Paradigm Multi-paradigm: Procedural, Object-Oriented, with functional features (quoted expressions, Lisp cells, unification)
Typing Weak, largely untyped (values default to 32-bit LONG), with optional declared types for pointers, objects, strings and lists
First Appeared 1993 (v2.1a, January 1993 - the first public release; development began in 1991)
Latest Version v3.3a (27 October 1997); the compiler became freeware with its assembly source in March 1999. Derivative compilers such as E-VO (3.9.4, July 2026) continue the language

Amiga E (usually just “E”, and often written AmigaE) is a compiled, general-purpose programming language created by Dutch programmer Wouter van Oortmerssen for the Commodore Amiga. Work began in 1991, the first public release came in January 1993, and the last official version, v3.3a, shipped in October 1997. In the author’s words it was “an object oriented / procedural / unpure functional higher programming language, mainly influenced by languages such as C++, Ada, Lisp etc.” - and it was built to program the Amiga’s operating system directly.

E combined things that rarely lived together in a 1990s home-computer language: C-like low-level control with inline 68000 assembly, near-instant compilation, Ada-style exception handlers, single-inheritance objects with virtual methods, garbage-collected Lisp cells, and Prolog-style pattern matching. Van Oortmerssen later wrote that “Amiga E was a tremendous success, it became one of the most popular programming languages on the amiga.”

History & Origins

A one-person compiler in assembly

Van Oortmerssen, then living in the Netherlands, wrote E as a personal project, and the version table in the v3.3a manual traces its growth (minor bug-fix releases v3.0b and v3.0e are omitted here):

VersionDateCompiler sizeMilestone
v0.3Sep 19915 KBFirst version to output executables
v1.0May 199220 KBBuilt-ins and library calls; usable for small tools
v2.0Oct 199238 KBv37 modules usable; language “pretty complete”
v2.1aJan 199344 KBFirst public release
v2.1bApr 199345 KBBug fixes; current version for over a year
v3.0aJul 199482 KBHuge feature jump; E becomes commercial
v3.1aDec 199485 KBEDBG debugger, preprocessor
v3.1iJun 199583 KBNew EDBG
v3.2aJul 199585 KB.library output mode
v3.2eNov 199585 KBNew EDBG and EasyGUI, bug fixes
v3.2iNov 199686 KBBug fixes
v3.3aOct 199786 KBFinal release

Some sources give September 1993 as E’s release date. That is when the AmigaE mailing-list archives were uploaded to Aminet. The author’s own table puts the first public release in January 1993, and an add-on GUI for using AmigaE, egui, was already on Aminet in March 1993.

The whole compiler, EC, was written in 68000 assembly language using the AsmOne assembler. Looking back, van Oortmerssen called it “the craziest software engineering exercise I have ever gone through (400kb of mostly uncommented assembly in a single source file, for a complex compiler).”

Going commercial

With v3.0a in July 1994 E “gets a price tag.” The public distribution stayed freely copyable, but it contained a demo compiler: by the v3.3a documentation, the demo refused to produce executables larger than 8 KB (the manual notes wryly that “this used to be 12k, yes. Guess why it has changed”). Registered users got the full EC executable, for a price the manual gives as 65 Dutch guilders (about US$40), through registration sites run by volunteers in several countries. The most important of them was Jason R. Hulance in England, who also wrote A Beginner’s Guide to Amiga E and whom the manual credits as “practically being the coauthor of the Amiga E package.”

Cover disks and popularity

E reached a much wider audience in December 1995, when CU Amiga issue 70 put the full registered v3.1i compiler on its cover disks together with a free 132-page printed guide. The magazine’s pitch centred on compile speed (“the compiler works extremely quickly! This means you don’t have to hang around for ages before you can actually run your programs”) and pointed to Paul Nolan’s Photogenics and Chad Randall’s icon editor as proof that E was “a real, professional programming language.”

The end of official development

v3.3a, dated 27 October 1997, was the last release. By then van Oortmerssen had moved to the University of Southampton, where he later completed a PhD in programming languages, and the Amiga market was shrinking fast. In March 1999 he made EC freeware and released its assembly source (the readmes are signed “march 1999”; his later homepage loosely dates the open-source release to ‘97). The source readme is candid about what it contained: “EC’s source code is terribly complicated, very badly programmed, and contains more long distance dependancies than any bit of code I’ve ever seen,” and “unless the modification you intend to make is absolutely trivial, writing the compiler from scratch would be a lot quicker.”

The 1999 release came with its own copyleft-style terms rather than a standard licence. Anyone redistributing a modified EC had to ship the modified source, give the project a different name with a version number above 3.3a, and credit the original. Van Oortmerssen’s current page nonetheless describes the compiler as open source under the GPL, although the 1999 readme only says the terms are “similar” to the GNU licence.

Design Philosophy

E was aimed at a very specific target: writing real Amiga applications quickly. The readme says “the Amiga implementation is specifically targeted at programming system applications,” and several design decisions follow from that:

  • Compile speed over everything. The v3.3a readme advertises a speed of more than 20,000 lines per minute “on a 7 Mhz amiga”, and the manual says the same of “a vanilla A500” (a stock 68000 machine). This is the author’s own figure for compiling E source with EC on that hardware; no independent benchmark or test program is documented. Whatever the exact number, fast compilation was the feature reviewers mentioned first.
  • The operating system as the standard library. Amiga system includes shipped as precompiled E modules (v39, then v40 in v3.2a), and library calls such as OpenLibrary() or AllocMem() could be made directly.
  • Loose typing by default. Every value is basically a 32-bit LONG, and types are added only where they matter: for pointers into structures, strings, lists and objects. This keeps simple programs short while still allowing structured access to OS data.
  • Borrow good ideas freely. Exceptions came from Ada, objects from C++, cells and quoted expressions from Lisp, and pattern matching from logic and functional programming. The manual’s appendix includes a section mapping E to C, C++, Pascal, Ada and Lisp.

Key Features

Syntax basics

E uses keyword-delimited blocks (PROC/ENDPROC, IF/ENDIF, WHILE/ENDWHILE) and := for assignment. Strings use single quotes, built-in functions are capitalised, and both /* */ and -> comments are allowed. The manual’s Hello World:

/* nominated for Most Boring Example */
PROC main()
  WriteF('Hello, World!\n')
ENDPROC

A procedure whose body is a single expression can be written with IS, and procedures can take default arguments and return up to three values:

PROC bla(a, b=1, c=NIL)      -> bla(x) is the same as bla(x,1,NIL)
  /* ... */
ENDPROC

PROC sincos(rad)
  DEF sin, cos
  /* whatever computation is needed */
ENDPROC sin, cos

-> caller takes as many results as it wants:
-> s,c:=sincos(3.14)

Exception handling

E’s exception mechanism, which the manual calls “basically the same as in ADA”, is attached to procedures with HANDLE and EXCEPT. Its most distinctive part is RAISE ... IF, which makes built-in or library functions raise an exception automatically when they fail:

CONST SIZE=100000
ENUM NOMEM
RAISE NOMEM IF AllocMem()=NIL

PROC main()
  alloc()
ENDPROC

PROC alloc() HANDLE
  DEF mem
  mem:=AllocMem(SIZE,0)       -> raises NOMEM on failure
  alloc()                     -> recurse until memory runs out
EXCEPT DO
  IF mem THEN FreeMem(mem,SIZE)
  ReThrow()                   -> unwind through every handler
ENDPROC

EXCEPT DO makes normal execution also fall into the handler, so it doubles as cleanup code. On Amiga, where the OS did not free a crashed program’s resources, this mattered a great deal.

Objects

OBJECT declares a structure; OF gives single inheritance; PROC name() OF type defines a method. All method calls are virtual, dispatched through a hidden class pointer that NEW installs. PRIVATE/PUBLIC control data hiding, END calls an end() destructor, and SUPER calls a parent’s method. The manual’s polymorphism example:

OBJECT loc
  PRIVATE xpos:INT, ypos:INT
ENDOBJECT

OBJECT point OF loc
  PRIVATE colour:INT
ENDOBJECT

OBJECT circle OF point
  PRIVATE radius:INT
ENDOBJECT

PROC show() OF loc IS WriteF('I''m a Location!\n')
PROC show() OF point IS WriteF('I''m a Point!\n')
PROC show() OF circle IS WriteF('I''m a Circle!\n')

PROC main()
  DEF x:PTR TO loc,l:PTR TO loc,p:PTR TO point,c:PTR TO circle
  ForAll({x},[NEW l,NEW p,NEW c],`x.show())
ENDPROC

Because Amiga system structures are ordinary OBJECTs in E’s modules, a program can even inherit from an OS structure such as Intuition’s gadget and add methods to it.

Lists, quoted expressions and unification

  • Immediate lists such as [1,2,3] can be written anywhere an expression is allowed, so an Amiga tag list can be written in place, as in the manual’s [WA_FLAGS,1,WA_IDCMP,$200,WA_WIDTH,120,WA_HEIGHT,150,TAG_DONE].
  • Quoted expressions (a backquote, as in `x*x*x) produce a pointer to code that can be run later with Eval() or passed to iterators like ForAll() and MapList(). The manual describes them as “parameterless (or global parameter only) lambdas.”
  • Unification with <=> matches a value against a pattern and binds variables:
a:=[1,2,3]
IF a <=> [1,x,y] THEN WriteF('\d \d\n', x, y)   -> prints 2 3

Lisp cells

Starting with v3, E has “Conservative Mark and Sweep Garbage-Collected Lisp-Cells”. <a|b> conses a pair, <a,b,c> builds a list, and Car/Cdr take it apart, with cells reclaimed automatically:

PROC append(x,y) IS IF x THEN <Car(x)|append(Cdr(x),y)> ELSE y
PROC sum(x) IS IF x THEN Car(x)+sum(Cdr(x)) ELSE 0

Close to the metal

Assembly mnemonics can be written directly among E statements and share E’s identifiers, and binary data can be pulled in with INCBIN. From v3.2a, EC could compile a program straight into an Amiga shared .library. The distribution also included the EDBG source-level debugger, the EasyGUI toolkit, a preprocessor and utilities such as ShowModule and EBuild.

Evolution

After official development stopped, the released source and the language’s following produced a family of successors:

CompilerAuthorNotes
CreativETomasz WiszkowskiExtended EC built on the released source; 2.12.3 on Aminet in July 2001
PowerDMartin KuchinkaReportedly derived from E and CreativE but with incompatible syntax changes; reportedly targeted 68020+FPU and PowerPC Amigas; module packages on Aminet from 2001
YAECLeif Salomonsson“Yet Another E Compiler”, written in E; 2.5d/2.5e on Aminet in early 2002
ECXLeif SalomonssonSuccessor to YAEC, written in E, targeting 68k and PowerPC Amiga-like systems; 2.2.3 update on Aminet December 2010
PortablEChristopher HandleyRecreation of E as a portable meta-compiler; r6b (24 November 2022) fully supports AmigaOS 4, AROS and MorphOS, with fairly good AmigaOS 3 and basic Linux and Windows support
E-VODarren ColesDerivative of the original assembly compiler; adds object unions, string merging and optimisations; 3.9.4 released 6 July 2026

Current Relevance

The original Amiga E is historical: v3.3a has not changed since 1997, and the original compiler generates code only for 68000-family AmigaOS machines. It is still freely downloadable from Aminet (dev/e/amigae33a.lha, ec33a.lha, ec33a_src.lha), and van Oortmerssen’s site hosts the same archives. The full v3.3a manual and Jason Hulance’s Beginner’s Guide are online as HTML.

The language itself has not died. E-VO had several releases in 2025-2026 on GitHub, and PortablE lets E code run on newer Amiga-compatible systems. E-VO in particular still targets classic 68000 and 68020+ Amigas, compiling on the machine it runs on. No official Docker image exists, since the compiler needs AmigaOS (real hardware or an emulator) to run.

Why It Matters

Amiga E showed how much language a single determined programmer could fit into a small, fast, native compiler on a 7 MHz home computer. Objects, exceptions, garbage-collected cells, pattern matching and inline assembly all shipped in about 86 KB of hand-written 68000 code. Magazines such as CU Amiga promoted it to readers as a way to start writing their own programs, and it gathered a lasting community of mailing lists, modules and tutorials.

It was also the start of a notable career in language design. Van Oortmerssen went on to create the False esoteric language, the Aardappel and Bla research languages, the Cube and Cube 2 / Sauerbraten game engines (with Lee Salzman), Google’s FlatBuffers serialization library, and the Lobster game programming language. E’s mix of pragmatic low-level access with borrowed high-level ideas runs through much of that later work.

Timeline

1991
Wouter van Oortmerssen begins work on E on the Amiga. According to the version history in the v3.3a manual, v0.3 in September 1991 is the first version able to output executables, with the compiler itself about 5 KB
1992
v1.0 (May 1992) adds built-in functions and library calls and is usable for small tools; v2.0 (October 1992) can use the AmigaOS v37 modules, and the author describes the language as now pretty much complete
1993
v2.1a in January 1993 is the first public release, followed by the bug-fix release v2.1b in April 1993, which remained the current version for more than a year. An AmigaE mailing list is active by mid-1993; its June to October postings were later archived on Aminet
1994
v3.0a (July 1994) brings what the author calls an enormous amount of new features and gives E a price tag: the public distribution now carries a size-limited demo compiler, and the full EC compiler has to be registered. v3.1a follows in December 1994 with the EDBG source-level debugger and a preprocessor
1995
v3.2a (July 1995) lets EC output Amiga shared .library files directly, adds a NILCHECK option for null-pointer checks and ships a new beginner's guide. In December 1995 CU Amiga magazine puts the full registered v3.1i compiler on its cover disks, naming Paul Nolan's Photogenics as written in E
1997
v3.3a, released 27 October 1997, is the last version by the original author. It adds a PROC close() for library mode, ships the source of EasyGUI and the EDBG debugger, and bundles two object-oriented class libraries
1999
In March 1999 van Oortmerssen makes the EC compiler freeware and publishes its source: a single file of 68000 assembly for the AsmOne assembler, released on terms that require modified versions to ship their source and carry a different name
2000
Tomasz Wiszkowski's CreativE 2.12, an extended compiler built on the released EC source, appears on Aminet in December 2000; Leif Salomonsson's YAEC, a new compiler written in E itself, is on Aminet by the same month
2022
Christopher Handley releases PortablE r6b on 24 November 2022, a recreation of the language that fully supports AmigaOS 4, AROS and MorphOS, with fairly good AmigaOS 3 support and basic support for Linux and Windows
2026
Darren Coles's E-VO, a derivative of the original assembly-language compiler, reaches version 3.9.4 on 6 July 2026, with further development builds in September 2026 - more than thirty-three years after E's first public release

Notable Uses & Legacy

Photogenics

CU Amiga's December 1995 cover-disk feature named Paul Nolan as having written the 'amazing' Photogenics, the Amiga image editor published by Almathera, in E - the best-known commercial application built with the language

Iconian

The same CU Amiga feature cited Chad Randall, author of the Iconian icon editor, as another prominent E programmer, offered as evidence that E could produce professional Amiga software

The Amiga E toolchain itself

While the EC compiler was written entirely in assembly, the manual states that all other support programs and tools, such as the EDBG source-level debugger, were written in E. EasyGUI, the bundled GUI toolkit, was also distributed as E source from v3.3a

ECX and PortablE

Later E compilers were written in the language they compile: Leif Salomonsson's ECX (with source uploaded to Aminet as version 2.3.1) and Christopher Handley's PortablE meta-compiler are both written in E and, according to their authors, can compile themselves

CU Amiga Cover Disk 122

CU Amiga issue 70 (December 1995) distributed the full, unrestricted registered compiler (v3.1i) as a cover-disk archive that readers unpacked onto three blank floppies, with a free printed 132-page guide, pitching E to readers as a way to write their own games and utilities

Language Influence

Influenced By

Influenced

CreativE PowerD YAEC ECX PortablE E-VO

Running Today

Run examples using the official Docker image:

docker pull
Last updated: