> The amount of concatenative language interpreters I've abandoned is a bit embarassing.
Earlier this week, I watched an excellent talk by Devine Lu Linvega where he was doing a bunch of digging into minimal programming languages. He spent a lot of time looking into Forth and other concatenative languages and he said he found a lot of implementations of the languages, but very little code written in them. It was as if soon as the implementers actually tried to use the thing they created, they gave up.
So your experience isn't unique. I've also written a couple of concatenative languages and quickly abandoned them after trying to write more than toy programs and realizing I wasn't smart enough to reason about the stack in my head.
Looks like my last attempt failed when I got bogged down prototyping a type system in Ocaml then trying to port that to Zig.
So in my case - it's not because I use them and they suck, it's because I find stuff like implementing type systems and GC very hard, and usually more practical things start wanting my attention more.
I'm convinced that Forth is the inverse of Lisp, and could be equally expressive, but because there are no parens to force matching of parameters, it's way too easy to lose things on the forth stack.
I believe that adding types and data structures to Forth, as is done in STOIC, combined with an IDE that allows you to SEE what parameters get eaten where, could make Forth viable for larger programs.
I tried to do this with MSTOICAL, which you all helped me to get to compile... but then I couldn't disentangle it from the build system, and my retina blew out... causing me to lose the ability to focus on the project.
I'm probably wrong, but my intuition tells me (in terms of Theory of Computation) that Forth is a programming language for Push-Down-Automata, and not a full-blown Turing Machine.
"a Turing machine is also equivalent to a two-stack PDA with standard LIFO semantics, by using one stack to model the tape left of the head and the other stack for the tape to the right."
Forth is essentially a two-stack PDA as described.
This talk will be published in a few days, fully-annotated at the Conference Guide [0] where you can download presentations for free. Sign up for the newsletter [1] to stay up-to-date (we're indie and the extra eyeballs help.)
Anyhow, the other comments linked the raw streams already :)
Earlier this week, I watched an excellent talk by Devine Lu Linvega where he was doing a bunch of digging into minimal programming languages. He spent a lot of time looking into Forth and other concatenative languages and he said he found a lot of implementations of the languages, but very little code written in them. It was as if soon as the implementers actually tried to use the thing they created, they gave up.
So your experience isn't unique. I've also written a couple of concatenative languages and quickly abandoned them after trying to write more than toy programs and realizing I wasn't smart enough to reason about the stack in my head.