Welcome to the Forum for the "Ren-C" Rebol Variant

At time of writing (circa September 2022, updating this old welcome from 2017) ...this site is largely a "design notebook" for the "Ren-C" branch of Rebol3.

For the uninitiated, it won't be easy to navigate! But to try and make the information here as digestible as possible instead of fade into irrelevance, it is edited frequently and mercilessly—like a Wiki. The goal is that someone coming later to a discussion can read it top to bottom and get a useful understanding without going through every dead end. So if your posts get reorganized and broken into multiple threads (or occasionally vanish), try not to be offended. Editing history is available by means of the little orange pencil icon in the corners:

Many outdated technical conversations are archived. The archives are public if you want to follow down some of the dead ends that inspired the current designs: just click and join the Archivist Group. It's your time, waste it if you want. :grin:


Don't Be Afraid To Say Hello!

If you tell us a little about yourself in the Introductions subforum, we may be able to give you some pointers in the right direction for things to look at.

If you're seeking a top-level vision of what we're trying to accomplish, then the 2019 Philadelphia conference videos are probably a good place to get some sense of that.


For the answer to the FAQ of how Ren-C relates to other Rebol Variants:


Discussions of other derivatives of Rebol are welcome here, in the "Redbol" subforum:

"Rebol's a more modern language, but with some very similar ideas to LISP, in that it's all built upon a representation of data which is then executable as programs. But it's a much richer thing syntactically."

"Rebol is a brilliant language, and it's a shame it's not more popular, because it deserves to be."

—Douglas Crockford, founder of JSON, 2009 [link]

If you're seeking a top-level vision of what we're trying to accomplish, then the 2019 Philadelphia conference videos are probably a good place to get some sense of that.

In particular, the short video on FizzBuzz showing the aesthetic of the "bricks" and how they plug together (along with some musing on the sense of "timelessness" that is sought after):

Unlike Lisp, it looks fairly convincingly like "normal code" in an imperative language. Yet it still has the homoiconic basis...allowing construction of code within the language itself, in a literate fashion:

>> conditionals: map-each [val word] [3 "Fizz" 5 "Buzz"] [
       spread compose/deep [
           if n mod (val) = 0 [(word)]
       ]
   ]
== [
    if n mod 3 = 0 ["Fizz"]
    if n mod 5 = 0 ["Buzz"]]

>> code: [100 n count-up]

>> length of code
== 3

>> reverse code
== [count-up n 100]

>> append code compose/deep [
       print [unspaced [
           (spread conditionals)
       ] else [n]]
   ]
== [count-up n 100 [
       print [unspaced [
           if n mod 3 = 0 ["Fizz"]
           if n mod 5 = 0 ["Buzz"]
       ] else [n]]
   ]

Then you can do code and get the FizzBuzz results:

>> do code
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
...(etc)...

This gives you Lisp-like powers in a smoother, modern syntax. (Some people like to show off the box of parts with "Rebol in Ten Steps", but Ren-C has tuned this significantly. It also has added the features like ELSE and SPREAD which depend on new mechanics, and give wide-reaching new powers to the system.)

2 Likes