H3sm
Since about 1992 I've been curious about the possibility and possibilities of a 3-stack Forth. I have a 3-stack interpreter/calculator now, that I call H3sm. Here's the long blurb, and here's the sourcecode of the first version worth looking at, H3sm 0.3 .

Much to my delight, Michael Somos has taken an interest in H3sm. He's already got a H3sm for non-x86's, or rather without 0.3's endianism dependancies, with some other improvements, such as fixing "negate". I guess this is 0.4. A 1.0 H3sm would be one with a compiler.

0.5 has a working "dp", dictionary pointer, and various cleanups.

19981229
H3sm needs a changelog file. You're looking at it. For now, anyway. If you want to submit a change to H3sm, please base it on the most recent H3sm in here.

Somos got hostfn working in 0.6 . He also improved some comments and put in a nice compile switch for big-endian boxen. Just to feel like I'm still involved, I fixed a bug in "time" and added a "bench" word that does a countdown loop of 2^20 ( a meg) iterations. Bench takes about 18 seconds on my 486dx120.

hostfn is fun. H3sm now trivially calls /bin/sh for things it doesn't know. The thing to never make a H3sm word is :; because this allows calling host commands that are legal H3sm hex numbers, e.g.
:; dc
will call unix dc, not put dc on the stack.

H3sm is really still just a calculator. If I write a compiler for it, it's going to be non-standard and rudimentry as hell. The gentle reader is invited to provide an alternative :o)

Jan 2001
H3sm has come a long way. It can thread new words from a file, and by the time you read this there may be an all-asm version out. I have a sketch for a H3sm-based kernel in mind, hence the assembly version.

May 2001
There is indeed an all-x86-asm H3sm, 1.5. Furthermore, I have incorporated it into a Linux kernel.

A H3sm is...
I guess a H3sm is a 3 stack machine with a "size" register/state variable for how big a data stack item is now, with data stack items, "pytes", settable to various byte sizes, using the low-significance byte of a pyte for logical flags, where pytes are otherwise handled in 2's-complement, and where most pointer operations occur on the pointer stack.