Concatenative Languages: Survey Results
Recently I submitted a small informal survey to the concatenative mailing list about concatenative languages. The results were interesting, and I thought I would share them here:
> - I feel the advantages of concatenative languages are ..
This is an interesting list that I can’t effectively summarize:
- syntactic simplicity x3
- easy to implement x2
- semantic closeness to a machine model x2
- generally good referential transparency x2
- conciseness of expression x2
- quick and continuous refactoring,
- incrementally implementable
- easy experimentation with language design
- powerful
- highly interactive
- fun
- dataflow notation
- very short read-eval-print loop
- natural modularization
- theoretically interesting and intellectually stimulating
- immediate testability
> - I feel that the most powerful advantage of concatenative languages
> is …
I think one word sums up the responses: simplicity.
- easy to refactor code
- syntactic simplicity
- close to the hardware
- immediate feedback
- immediate testability
- ease of syntactic transformation
> - My positive experiences with concatenative languages have been …
This was a tricky question for people to answer because it was subjective and open-ended. It did reveal something I think: Forth has already proven itself a particularly effective language for embedded programming development. Also I think it reveals that learning about concatenative languages is intellectually enriching.
- learning about Forth;
- challenging myself to do anything productive with dc;
- having a wonderful time playing with Factor.
- programming in Forth
- scientific and embedded programming in Forth
- reading about Joy
- large scale instrustrial software development with Forth
- learning about the fundamental issues of computer science
> - My negative experiences with concatenative language have been …
Many of the negative experiences mentioned were primarily language specific. However, I think the results suggest that maybe people find concatenative languages somewhat hard to use. However, this could also be due to preconceptions.
- fragmentation of the Forth community
- distinguishing compile-time from run-time and definition-time execution in Forth
- lack of a type system in Forth
- Trying to program in Joy
- Lack of acceptance of Forth by clients
- programming complex algorithms without named parameters
> - I feel that for concatenative languages to gain more mainstream
> success will require …
In summary: better tools and find a niche.
- development and maturation of one or more programming environments
- that it is clearly demonstrated what they are good for.
- a solid high-level language with multiple successful implementations or platforms
- choose a niche (e.g. embedded programming)
- a major breakthrough in ease of programming
- the identification of a lively niche where they provide great leverage
- education as to the advantages
- overcoming the aversion to postfix syntax.
- integration of ideas from modern programming language theory
- better tools
> - I consider a language to be concatenative when it has the following
> properties …
So I’ll summarize with my own personal definition inspired by the other contributions: a concatenative language is a language where the concatenation of terms (i.e. justaxposition or sequencing) denotes the function composition operator instead of function application.
- token-oriented, combinator-based postfix syntax with relatively shallow nesting;
- semantics defined primarily by function composition rather than by [nested] function application;
- an execution model of passing state from function to function.
- concatenation of source text denotes new programs
- where concatenation means function composition
- Concatenation is just about everything.