The Algebra of Joy (2008)
kevinalbrecht.com
kevinalbrecht.com
Also related: http://tunes.org/~iepos/joy.html. This article considers the relation between Joy and combinatory logic, a topic that enjoyed some interest in the Haskell community[3].
[2] https://groups.yahoo.com/neo/groups/concatenative/conversati...
• It’s easy to write good tools for writing, editing, refactoring, analysing, and visualising programs, because the language is really simple. If it’s easy to write good tools, those tools are more likely to exist and be correct.
• Functions are good basic units of behaviour. This fact is used in most paradigms. The fact that is not used explicitly in most paradigms is that function composition is a good basic way to combine behaviours. (Functional programming being a notable exception.)
• Small, modular parts are generally easier to understand than monolithic wholes. Being able to really easily decompose things into small parts helps you write correct programs more easily.
• Naming is hard. You can choose to name your intermediate state when it makes your code clearer, but concatenative languages are the only ones that never require named state. The intent is to use names mostly to describe behaviours and how they relate.
I have been working on a statically typed concatenative language, Kitten, for a little while now. It’s working in the same problem space as Rust and Nimrod—making low-level programming feel high-level by using type system features to make high-level constructs have low-to-no runtime cost. It’s still a research project, but you should keep an eye on it: https://github.com/evincarofautumn/kitten