I had a love affair with concatenative programming before dropping out of college. I made a typesetting system in PostScript when *TeX started getting too painful for what I was doing. Coming back to it a year later, I felt differently. Whether it’s functions Stack → Stack or not doesn’t matter (I did try this in Haskell;) there is too much implicit knowledge not apparent from the code, IMO. I tried to design a language that retained the qualities I enjoyed, but without the stack manipulation. This turned out to be more difficult than anticipated, and now I’m working on the intermediate language. All this is to say, I love postfix notation and feel there are things I need to extract from these languages in order to take them to new places.
Stack → Stack
At the core of my love for the idea of concatenative languages is this.
We know our industrial scale software systems are far far too complex to reason safely about. We desperately need really good tool support.
None of our current languages, not even the newer ones like D or Rust permit anything like what Joy does.
An algebra for Joy.
Which permits a rewriting system for Joy….
However, that said, concatenative languages rely on a tricks that makes them simple to handle with the primitive tools we have…
* No name binding.
* string concatenation is conveniently mapped to function composition.
I don’t think those properties are fundamental to creating algebras and rewrite systems.
It just makes it a lot easier to do with primitive “stone axe and sharpened stick” grade tools we have.