Taking a new look at REBOL
The other day I was on StackOverflow and an open source ad on the sidebar caught my attention with the words: “help us build the first full-stack Language” and “RED”. “Well,” I thought, “this is rather intriguing.”, so I clicked down the rabbit hole.
What greeted me was less than I hoped, other than a very interesting graph showing the ideal of this project, which aims to be, as the ad promises, a full-stack language, down from the hardware, up to the most abstract level people can apparently think of, which is domain-specific language. Browsing around the site proved rather fruitless, as there is very scant documentation other than a formal specification of the language, nothing someone of my level can easily absorb or would find interesting.
What was interesting though is that this project is either derived from or influenced by Rebol. So after playing with the Red interpreter a little and gathering from the website that apparently you have more joy if you know Rebol, I decided that maybe it is best if I take a look at Rebol again.
You see, I came across Rebol some years ago, and after a brief encounter and an enthusiastic blog post, I actually never touched it again. However, since finding this link to Red a few days ago, my interest in Rebol has been renewed to such an extent that the past few days it seems I have spent every spare minute trying to learn about it. So what changed?
Well, since writing that old article, it turns out that the core of Rebol (at least the new version, R3) was open sourced some time nearing the end of 2012, although R3 is still, it seems, experimental and not highly maintained. The other thing is that since that time I had spent some time investigating functional programming, looking at languages like Haskell and Lisp, but never getting very far for lack of finding a practical application for them.
However, now that I have spent some time with renewed interest in Rebol, I have uncovered a new world of cool.
One of the really neat aspects of Rebol is its size. The two free flavours of R2 that you can download are small – really small. The /Core version is only 296KB, and the /View version, which allows you to write GUI applications is only 844 KB, still under a megabyte. Insane, right? No big runtime, no huge standard library. You could ship an application with the Rebol runtime as the only dependency.
Sure, the GUIs that you can create with /View is not native-looking (unless Athena widgets is native to you) and not to everyone’s liking, but it is highly configurable and you can create useful graphical applications in literally no time. I cannot help but think that this is what why’s Shoes aimed to be. It highlights another of the absolutely great aspects of Rebol; the fact that you can be productive with it right away.
Moreover, it is amazing what is packed into such a small executable. Along with built-in networking, you get stuff like a foreign-function interface for loading and calling shared library functions and a prototype-based object system. And then there are the types. The number of types that are built-in are practical for writing useful apps right away, without the need for loading another library to use and interpret values. Stuff like dates, URLs, Emails, Money etc. are all preconfigured types. It’s all just very well thought out.
Working with the Rebol console is also a pleasure. Typing ‘help’ or ‘?’ followed by the name of a function or some other value will give you documentation if there is, or otherwise information about the type and value. The built-in help makes it interesting to discover the platform and built-in functions.
All of this makes Rebol fun to learn, but it is fun for another reason: It has a delightful syntax. With its strict left-to-right evaluation of expressions, there is no need for cumbersome curly braces, or truckloads of parentheses as in Lisp. It makes code clear and easy to understand. Square brackets are there to help you. And you will be learning the concepts of functional programming, perhaps even without realizing it, and without all the akward syntax and loads of upfront theory of other languages. And best of all, everything is very natural and flowing and expressive, in ways you are probably used to.
Really, I am impressed by what I have seen so far after having only scratched the surface, and still having a lot of fun learning REBOL. The only gripe I have is that syntax highlighting for editors like Sublime Text or Notepad++ is either outdated or non-existent, or you have to resort to the built-in highlighting in Vim (yay Vim!). But you can make do with what’s out there. Also, I am not sure you will find a readily available libraries for all sorts of things like talking to a MongoDB database for example. But maybe with time and getting the word out there, those things will come.
On the upside, there is literally tons of great documentation, I guess partly because REBOL was a commercial product and partly because of a very dedicated (albeit small) community. Two great sources of documentation are an online version of the Rebol/Core User Guide and a lot of guides written by Nick Antonaccio at http://re-bol.com. (Great guides, really, and very detailed, and still recent). That’s more than can be said for a lot of other projects.
I can understand why people using Rebol love it. I wish for every developer to stumble across this glittering gem of a language. Unlike DrDobbs I am of the opinion that Rebol is for everyone. And for Rebol and Red I wish a great big thriving community. Because really, they deserve one.