February 20, 2009: New additions: Bluebottle, IoL4, Little Smalltalk, Oxford Oberon-2, TinyScheme
As a child, I was fascinated by small, intricate things. Wind up clocks and tree seeds were two of my favorites. This continues through my programming. I take a certain pride in making something small, reliable and easy to comprehend. I also take it a bit further than most. Even in college, while surrounded by engineers (who usually like pragmatic elegance), I was teased for writing a dozen three line functions when my classmates used a single 100 line main.
Similar minimalistic styles can be found in artwork, literature and music. These styles are often enforced by the medium. Ink drawings only use crisp lines. Haiku will never ramble on. Saxophones don't play chords.
Sometimes the tools themselves are simple. An ink pen is pretty simple. However, the full interplay of language available to the poet is beyond a single person's understanding. If you've ever repaired a broken spring deep in the works, you know how complicated a saxophone is.
There is a certain appeal in closing the meta-loop of minimalism in programming. Writing simple, efficient code in languages which themselves are simple and efficient. To that end, I've collected programming environments which are small and self contained, while still useful.
Side note: many of these are for x86 linux. If you don't have linux, find almost any old flash drive or memory card. Install Tiny Core Linux to it. Enable USB booting on your computer. Tiny Core is 10 megabytes and uses a highly modular packaging system. There is a copy on the boot partition of every computer I own, for the two or three times a year when I brick my primary partition. Tiny Core is actively maintained and dead simple to extend. It is a good fit with philosophy of minimalism.
amforth is probably the gem of this collection. All you need is a serial connection to begin programming high level embedded applications.
Tiny C Compiler is a very small compiler that very quickly compiles very small x86 binaries. Available for Linux and Windows, use it to build many of the following applications.
dream Scheme is an R4RS compatible Scheme written in x86 assembly. There are versions for Linux, Windows, and bootable floppy.
jonesforth is a literate x86 assembly tutorial and forth environment. Public domain, too.
joy is an odd little language. It feels halfway between Forth and Factor.
Little Smalltalk v3 has a non-graphical Smalltalk REPL in 40K. V4 segfaults a bunch, and v5 was biggish.
Oxford Oberon-2 is the smallest Oberon compiler around. Building from source is a little convoluted, but works on Solaris, Linux, Windows.
TinyScheme is mostly R5RS. See the site for optional goodies like sockets, filesystems and regular expressions.
Some of these are not programming languages. Some are languages, but don't run on the metal themselves. Some of them are clever toys, but not useful. Some are redundant. Some are useful, but also comparatively big. Some look awesome, but I don't have the hardware for proper experimentation. They still deserve mention, and if your tastes differ from mine, may even be exactly what you are looking for.