August 2009: New additions: Movitz Lisp, Ocaml Mindstorm
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. As for music, you know how complicated a saxophone is if you've ever repaired a broken spring deep in the works.
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.
Caml Light compiles for windows and unixes. The entire system is about 200kb.
dream Scheme is an R4RS compatible Scheme written in x86 assembly. There are versions for Linux, Windows, and bootable floppy.
Gofer (GOod For Equational Reasoning) is a subset of Haskell 1.2. Very small, very fast, but no GC.
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. But throw in single assignment and Lisp-style code manipulation, while replacing every flow control statement with combinators.
Little Smalltalk v3 has a non-graphical Smalltalk REPL in 40K. V4 segfaults a bunch, and v5 was biggish.
Movitz is a small (almost) ANSI complete Lisp which runs on bare x86. The floppy image works well, but I had some issues with screen width.
Oxford Oberon-2 is the smallest Oberon compiler around. Building from source is a little convoluted, but works on Solaris, Linux, Windows.
SmallEiffel Compiles to C or JVM bytecode.
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.
- a-Linux has a 532 byte http server.
- BashForth is a portable, no install atrocity.
- Bluebottle is the very modern OS built on Oberon-2.
- Chaos Linux is a 6Mb distro for clusters.
- Dreams is a message-passing Forth.
- GTK-server can easily give any little program a GUI.
- Hedgehog Lisp "Never underestimate the power of a small tactical Lisp interpreter."
- IOCCC x-lisp is a tiny lisp interpreter, which stores all it's data structures as strings.
- IoL4 merges the IO language and L4 microkernel. Very buggy.
- Language Zoo contains several different styles of languages written in OCaml.
- Lua is a common application scripting language.
MinForth provides windows, linux, dos and source versions.
OCaml Mindstorm runs on the second generation brick, the NXT.
- pbForth for RCX is a nifty interactive Forth for the Lego Mindstorms.
- pbLua offers a complete toolchain and is actively developed.
- Pico Lisp is a very complete lisp system, with many libraries.
- picoOS supplies a small real time operating system for several platforms.
- smlisp almost made the cut, but the Modula3 library kills its size.
- TFLC is a very small and experimental Haskell engine.
- tinypy is missing all of my favorite features.
- uBASIC is the only Basic listed here, and only then because it was written by the brilliant guy behind uIP.
- XS for RCX is a Lisp shell for Lego Mindstorms.