Cat: A statically typed concatenative language
web.archive.org
web.archive.org
Let’s discuss the substance of this language and let its authors figure out marketing.
If I’m reading it right, it’s a functional programming language but has higher level language capabilities built on top of it and each level of capabilities is packaged as a “level” to help know what runtime/capabilities are available to any program. I could be way off though.
It also seems very dead as the original site points to a GitHub 404.
Edit: bad forward on the domain but the GitHub repo is here, last update was three years ago: https://github.com/cdiggins/cat-language
It’s seriously impressive in my opinion.
At the same time, presumably, common processor architectures have all undergone decades of targeted optimisation to improve their performance on the typical imperative code that is encountered in system and user programs. What are the implications of this? Should we expect a theoretical cap on the real-world performance of concatenative programs that is well below what we can achieve with mainstream programming languages?
CPUs have been designed to let you write C that runs fast, not to make typical C run fast. Maybe the CPU-wallahs wanted the latter, but they haven't really achieved it — avoiding pipeline stalls and unpredicted branches can make factor-of-100 differences and and that's not something "typical C" (or Java for that matter) does.
I mean: If you want to avoid pipeline stalls due to uncachable main memory reads, writing code like typical C isn't your first solution.
This is usually a problem for people who write 'fast code', they have to hire a bunch of compiler devs to stop the compiler and CPU invalidating each other's optimizations, and to implement one-off domain specific optimizations.
This is how a vast majority of compiler people are employed nowadays.
Thirty years ago a single misplaced read that goes all the way to main memory couldn't take as much time as a hundred well-conceived instructions, even in the worst case. Now it can. A badly chosen data structure that ends up causing a loop over a linked list ends up sucking. I don't think that's anyone's intention. Noone wanted to make choosing the right data structure become a bigger advantage. CPU frequencies outran main-memory frequencies, the number of instructions issued per cycle grew, but not because anyone wanted to punish linked-list iterators.
I think what I really wanted to say was: CPU vendors try to improve. The things they try to improve don't add up to "make bad code run fast", even if much of their motivation may be that. "Increase the number of instructions issued per cycle" or "improve the branch predictor" bends the effect towards code which is written with some awareness of the CPU, ie. good code. Bad code is IMO almost synonymous with code written without awareness.