Perhaps foolishly, I offered to give a talk at my local Functional Programming meetup next month. Given my recent interests, I’m thinking of giving an intro to Rebol and its basic concepts.
So that’s gotten me thinking: what are the basic concepts of Rebol as a programming paradigm, which distinguish it from all others? Here’s what I’ve come up with so far:
Everything is a datatype: Rebol was built for networking. This means you should be able to take any value, serialise it in a human-readable way, and parse it back into a value. This means a lot of built-in datatypes for useful concepts.
Data is code: Everything starts out its life as data. If you want, you can evaluate it in some way to get a result. Naturally, you can evaluate it using any rules you want, which gives you dialecting as a corollary.
(It’s worth noting that this is the converse of Lisp’s famous maxim, ‘code is data’.)
Binding: Word values are associated with their storage. This can be arbitrarily manipulated by the programmer, leading to definitional scoping.
More generally, I might summarise all the above points as natural consequences of computing with evaluation: the fundamental operation of Rebol is taking values and extracting some kind of result from them. This necessitates the other points above: a rich set of datatypes to store both the original value and the result, the ability to treat those datatypes as code which can be evaluated, and a way to look up references during the evaluation process.
Does this all seem reasonable? Have I missed anything?