My History With Forth And Stack Machines
yosefk.com
yosefk.com
If anybody's curious, all my development tools and forth code are on github: https://github.com/JohnEarnest/Mako
(I played around with GraFORTH on the Apple ][ back in the day, and I remember it was wicked fast, and kinda fun)
But when I started building my own software product to sell and support, adding things like one of the first networked learning management systems and a homemade graphics windowing system (schools were MSDOS or Apple II in the day, if you wanted a GUI you built one) I switched everything over to C even though that meant teaching myself C and re-architecting everything from scratch.
Creating and working with abstraction layers was critical to that project's success, and simply not doable in Forth. So I've always thought of Forth as kind of like a first girlfriend - maybe not "The One" but a delightful and important phase that helped me learn what was important to me.
I've also known a number of FORTH enthusiasts. In general I've not been impressed with their efforts, or their insistence that FORTH is the Universal Language, and everyone not using it for everything is missing out big.
I think it'd be fun to hack on one of Moore's multiprocessor systems. But I don't think I'd want to program one for a living.
-----------------
Why pay this cost? Because I don’t do algorithms, other people do, so I have to trust them and respect their judgment to a large extent. Because you need superhuman abilities to work without layers. My minimal stack of layers is - problem, software, hardware. People working on the problem (algorithms, UI, whatever) can’t do software, not really. People doing software can’t do hardware, not really. And people doing hardware can’t do software, etc.
The Forth way of focusing on just the problem you need to solve seems to more or less require that the same person or a very tightly united group focus on all three of these things, and pick the right algorithms, the right computer architecture, the right language, the right word size, etc. I don’t know how to make this work.
My experience is, you try to compress the 3 absolutely necessary layers to 2, you get a disaster. Have your algorithms people talk directly to your hardware people, without going through software people, and you’ll get a disaster. Because neither understands software very well, and you’ll end up with an unusable machine. Something with elaborate computational capabilities that can’t be put together into anything meaningful. Because gluing it together, dispatching, that’s the software part.
So you need at least 3 teams, or people, or hats, that are to an extent ignorant about each other’s work. Even if you’re doing everything in-house, which, according to Jeff Fox, was essentially a precondition to “doing Forth”. So there’s another precondtion - having people being able to do what at least 3 people in their respective areas normally do, and concentrating on those 3 things at the same time. Doing the cross-layer global optimization.