Why Red: Part 2

Having used Rebol for many years, I've found that it is the most productive general purpose language I've used. Some language are good at one thing, but not another. In my work, I develop a wide range of tools, products, and infrastructure. Having a single language that I can tailor to different circumstances, by building dialects (DSLs), provides a lot of leverage. Time isn't spent changing mental gears between languages when I need to write the GUI that talks to a server component I was just working on, or when using it as a portable shell for admin work. This is particularly helpful when you have smaller teams. The more technologies they need to keep up with, and keep in sync, the less time they can devote to the real work.

One shortcoming in Rebol is that it wasn't easy to extend. Being closed source, R2 (Rebol 2) could only be extended for performance or system integration by writing and calling into DLLs, which you can't write in R2. So I have DLLs written in other languages, to interface to devices or the operating system in ways R2 can't. R3 was released as open source, but is written in C. In order to extend it with compiled elements, you need to drop out of Rebol and write in C.

What makes Red unique is that is provides all the high level features of a modern, dynamic, functional language, adds elements other languages have not adopted yet (native datatypes for common values like email addresses, urls, and IP addresses), which provide enormous value on their own, and is built on the language itself. This, in itself, isn't new. Lisp has done it all along. And that points out how powerful and important this concept is. Lisp is still around, and influencing new language development every day, including Red. A shortcoming in many Lisps is low-level efficiency. This is where Red/System comes in.

Having a low level dialect of Red as the base language that it's all built on lets you write code at any level, for any purpose, without having to change mental gears. Complete leverage. There is no other language I'm aware of that does this. The features available in each dialect are different, of course. Red is a high-level, dynamic language. R/S (Red/System) is a C-level language. R/S uses values that can fit into CPU/FPU registers, and gives you control over memory allocation. It can only be run compiled, while Red can be interpreted. Aside from that limitation, you can freely mix and match the two. Red is implemented in Red/System. Think about that for a moment. Red/System is a dialect of Red, an embedded DSL of its host language, yet the host is implemented in that dialect.

It just looks more and more like a programming language, doesn't it? But it isn't. You can use it as one, and it is extremely effective when applied that way, but it's not the whole story.