I’m actually just done reading the whole post. I may have fallen into many rabbit holes. I’ll take a look at the rest of the site, if everything if of the same high quality it’s gonna be great!
I've been reading about Forth on and off for 30-40 years, and this is indeed a well-written article. Let me write a contrarian opinion about the Forth language itself though.
As far as I can tell, the Forth community spends most of its time doing 2 things: 1) Explaining how Forth works, and 2) Writing new Forth interpreters. I have never seen it used to create something useful. I've worked on tiny 8-bit microprocessors, 16-bit DOS programs, 32-bit desktop GUI apps, and 64-bit cloud applications running on thousands of servers. I've seen hundreds of apps pass through my computers over the years. Those apps have been written in assembly language, C, C++, Fortran, Java, Python, JavaScript, Go, and others. Never Forth.
The article has a quote: "To understand Forth, you have to implement a Forth". I think this severely limits the usefulness of Forth. What other programming language imposes such a mountain of cognitive overhead? Do we need to write a C compiler to understand and write C applications? Do we need to write a Python interpreter to understand Python? Do we need to write a Z80 assembler to write Z80 assembly language? No. Yet Forth claims to be "simple".
Forth is unreadable. I say this as someone who has written maybe thousands of lines of RPN code on HP calculators. I love RPN calculators, but Forth is unreadable, because 6 months from now, I would not be able to read my own code. Building non-trivial applications requires building on top of the works of others, including my previous self. Forth programs are not compatible with other Forth programs. As the article says, "Chuck Moore rejects the standardization of Forth". Forth seems unsuitable for building substantial applications, especially ones that require teams of engineers instead of a single person.
Forth is apparently suited for resource constrained environments, like microcontrollers. One of the most successful microcontroller projects is Arduino, supporting hundreds of different microprocessors. Does Arduino use Forth? Nope, it uses assembly language, C, and C++. Hobbyists with almost no programming experience can understand C, write C, and create useful applications. They don't want to write a Forth interpreter to blink a few LEDs, read some GPIO pins, and send some packets over WiFi on an ESP32 chip.
I rather think of Forth, not as a programming language, but as a technique, similar to binary trees, regular expressions, or recursive descent parsing. It is seems worthwhile to have in your toolbox. But it is not something that seems reasonable for building applications of substantial complexity.
Having said all that, I would love to hear about anyone's success at using Forth for their projects (I mean, something other than, "I built my own Forth interpreter").
I agree with everything you have written but I will say this, Factor looks like you can write “useful” programs with it. I was watching a presentation on Factor on YT and I was thinking that’s cool and all but how do you make an HTTP request and parse the response and almost immediately after that the presenter showed it.
The only significant program I know of written in Forth is the 80s game Starflight. You fly around the galaxy, exploring planets (each procedurally generated) and eventually solving a mystery. And ... I can't think of any other program.
Makes me want to restart my efforts to port JonesForth to some other machine!
As far as I can tell, the Forth community spends most of its time doing 2 things: 1) Explaining how Forth works, and 2) Writing new Forth interpreters. I have never seen it used to create something useful. I've worked on tiny 8-bit microprocessors, 16-bit DOS programs, 32-bit desktop GUI apps, and 64-bit cloud applications running on thousands of servers. I've seen hundreds of apps pass through my computers over the years. Those apps have been written in assembly language, C, C++, Fortran, Java, Python, JavaScript, Go, and others. Never Forth.
The article has a quote: "To understand Forth, you have to implement a Forth". I think this severely limits the usefulness of Forth. What other programming language imposes such a mountain of cognitive overhead? Do we need to write a C compiler to understand and write C applications? Do we need to write a Python interpreter to understand Python? Do we need to write a Z80 assembler to write Z80 assembly language? No. Yet Forth claims to be "simple".
Forth is unreadable. I say this as someone who has written maybe thousands of lines of RPN code on HP calculators. I love RPN calculators, but Forth is unreadable, because 6 months from now, I would not be able to read my own code. Building non-trivial applications requires building on top of the works of others, including my previous self. Forth programs are not compatible with other Forth programs. As the article says, "Chuck Moore rejects the standardization of Forth". Forth seems unsuitable for building substantial applications, especially ones that require teams of engineers instead of a single person.
Forth is apparently suited for resource constrained environments, like microcontrollers. One of the most successful microcontroller projects is Arduino, supporting hundreds of different microprocessors. Does Arduino use Forth? Nope, it uses assembly language, C, and C++. Hobbyists with almost no programming experience can understand C, write C, and create useful applications. They don't want to write a Forth interpreter to blink a few LEDs, read some GPIO pins, and send some packets over WiFi on an ESP32 chip.
I rather think of Forth, not as a programming language, but as a technique, similar to binary trees, regular expressions, or recursive descent parsing. It is seems worthwhile to have in your toolbox. But it is not something that seems reasonable for building applications of substantial complexity.
Having said all that, I would love to hear about anyone's success at using Forth for their projects (I mean, something other than, "I built my own Forth interpreter").