Unrelated to the main topic, but I watched this video when I was in college and it was one of the factors that inspired me to pursue programming seriously.
I have had Factor installed and ready to go on each of my last three personal machines, and never got to the point of having a solid project to attempt.
I absolutely love the idea of concatenative languages, I just haven't gotten my toes in the door, so to speak.
Is there a concise document somewhere that gives reasons why someone who uses an Algol style block structured imperative language (C, C++, C#, Pascal, etc.), or indeed any non-concatenative language, would benefit from switching to Factor?
The older I get the less willing I am to learn languages just because they are interesting.
It works like this: You try Factor. You stick with its weirdness through one or two small projects. Somewhere in there your brain starts to accept the new way of doing things. Shortly after, you discover there are things you like and things you don't. You refine your opinion as you use the language more.
After a week or so, you will want to use an abstraction from Factor in a project for your day job. Maybe you implement it. You have confidence it will work because you've already seen it in Factor. But maybe you don't implement it for whatever reason. Even then, you have an advantage over your coworkers because you already have mental tools in place to help you reason about the problem.
The Sapir-Whorf hypothesis sure seems to hold with programming languages. Some ideas are easier to have in some programming languages than in others, although once you have the idea you can often 'explain' it in a programming language where it's less obvious.
That said, effectively no one would benefit from switching. I like Factor, and stack languages in general, but from a difficulty perspective, they are MUCH more difficult than languages from the Algol family to use.
There is no reason. We identify things in terms of words, not positions on the stack. We think "multiply first vector's y coord by second vector's z coord", not "multiply item 15 on the stack by item 12 on the stack". Thus, stack-based languages lose out in usability and are really just a curiosity without much practical applications.
> it has powerful metaprogramming capabilities, exceeding even those of LISPs;
The part where it says it even exceeds that of Lisps, is it because it has access to change all prior tokens and later tokens? Basically factor parser words are like full program reader macros?
I don't know if it's Baader-Meinhof or what, but I'm seeing concatenative languages all over the place now. Which is great, because now I'm planning to write my own! My gut says that a concatenative language could be ideal for competitive programming, where you want to quickly apply various transformations to your input and immediately see the result.
I implement small Forth-likes quite a lot, for instance [0].
I really like having something to explore 70-80s machines (other than Basic), hardware and systems that have no/bad Repls (like Xamarin). This kind of thing is ideal for that as it takes a really short time to implement, gives full and flexible access and it is fast enough to prototype things with.
Factor is definitely not that small (there's a full optimizing compiler and a giant standard library…) and doesn't run on any embedded platforms. It's more like C# than like Forth in terms of usage scenarios.