Well the results of the survey are in (sorry about the delay):
> - 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.
I hope you found this as intersting and useful as I did.
A big thank you to everyone who contributed!
Christopher
http://www.cdiggins.com