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 don't be afraid to say hello in the "Introductions" subforum. If you tell us a little about yourself, 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]

1 Like

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