August 2009: New additions: Movitz Lisp, Ocaml Mindstorm
September 2009: Floppy booting, Open Firmware, Bitlash, more Movizt.

Original A collection of small programming environments. New additions: Bluebottle, IoL4, Little Smalltalk, Oxford Oberon-2, TinyScheme New additions: Caml Light, Gofer, TFLC. New additions: Nasal, Joy mindtrip. New additions: SmallEiffel, Nasal clarification. New additions: picoOS, pbLua, Dreams New additions: Movitz Lisp, Ocaml Mindstorm Floppy booting, Open Firmware, Bitlash, more Movizt. Editable
version 7 & 8 of 8

 

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.

MohanArun.com (2009-09-09-01-00-29-183)

In my class project using Pascal I created several shortened macros so my main program would become much easier to type, for example WLN; would expand to WRITELN;. I am always fan for tiny software that does the job well. Check out tinyapps.org for a long listing of tiny well-made software



Kyle (2009-09-09-18-18-42-724)

That sounds like obfuscation, not exactly what I was describing.



 

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 a primary partition. Tiny Core is actively maintained and dead simple to extend. It is a good fit with philosophy of minimalism.

Side note two: several of these are bootable floppies. Such disks and drives are a rare breed today, so boot the images with grub. The same trick works for LILO, too. Basically this copies the image to memory, then executes it. There is one downside, changes to the ram disk will not be saved back to the disk image.

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.

Michael (2009-09-02-11-17-03-304)

This is a wonderful page. I'd love to see you describe how you installed the Gofer files sometime. I ran into all kinds of trouble just now, but you probably have lots of experience with getting old code working....



Kyle (2009-09-17-18-07-46-472)

I did not get the interactive version to work, but TCC could build the compiler. If I can find my notes, I will post more.



 

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.

mini Pico Lisp is basically Pico Lisp but without any libraries.

Movitz is a small (almost) ANSI complete Common Lisp which runs on bare x86. The floppy image works well, but I had some issues with screen width. Asteroids and emacs are available on archive.org, but I haven't tested these yet

Nasal is a small Javascript-ish language. Get the CVS version, it has an interactive REPL. Compiles down to 80Kb on GCC.

Open Firmware provides a Forth environment and a lot of hooks into your system. The build instructions do not match the current directory layout, but you can figure it out.

Oxford Oberon-2 is the smallest Oberon compiler around. Building from source is a little convoluted, but works on Solaris, Linux, Windows.

 

SmallEiffel SmartEiffel Compiles to C or JVM bytecode. I recommend version 1.1, or the pre 1.0 SmallEiffel.

Cyril ADRIAN (2009-09-15-08-46-31-932)

SmallEiffel is now known as SmartEiffel

Its official home is

http://smarteiffel.loria.fr

It's a full-fledged Eiffel environment, not only for "small" projects as the title of this page suggests.



 

TinyScheme is mostly R5RS. See the site for optional goodies like sockets, filesystems and regular expressions.

Runners Up

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. *
    bitlash fixes one of my complaints about the Arduino, by providing an interactive shell.
  • 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.
Bill Roy (2009-09-02-07-41-33-684)

Bitlash was written in the tiny spirit. It runs comfortably in 8kB on an AVR Tiny85. http://bitlash.net