Larry Wall on Rebol

Skip to first unread message

Matt Sergeant

Nov 4, 1998, 3:00:00 AM11/4/98
Posted from Perl5-Porters (without permission - but I'm sure Larry won't

Alternative opinions welcome. (Except those that say "Perl is crap
because it's hard to read").


By Larry Wall

October 30, 1998
12:55 PM PST

Well, it was actually reading up on REBOL that reminded me I wanted
tuples. (REBOLs tuples are essentially a representation of an IP
address. That is, the numbers are limited to 0..255, and you can only
have four of them.

The quote in Microtimes was just what I could say off the top of my head
while reading the for the first time. In other words, I
was just winging it. Having studied up since then, here's what I really
think (which I sent in answer to a query from Germany).

> Larry

> Now my questions: Have you looked at REBOL yet?

The first time I was asked, I was reading the web page on the fly while
commenting on the phone. Needless to say, I mostly mumbled vague
generalities. :-)

But I've read all the available documentation since then, and played
with it a little.

> What do you think about it?

REBOL is essentially a de-parenthesized LISP variant with builtin
support for some handy datatypes such as dates and email addresses. As a
LISP-like language, it conflates program and data in a way that some
folks will find confusing. Without LISP's parentheses, however, the
syntax forces you to count arguments to know which terms of an
expression will be passed to which function.

So far I think REBOL falls into the category of a cute toy. The
documentation is sketchy and contains a certain amount of functional
mumbo jumbo. The licensing terms for the REBOL interpreter are unclear
from either the documentation or the web site. It's "free", but I don't
know whether the source is available. The language makes some things
easy, but other things very difficult. There's no support for
system-dependent programming. Associative arrays are emulated, but don't
scale well (200 times slower than Perl for 1000 elements). There are no
regular expressions for pattern matching. Where Perl and REBOL have
corresponding builtin functionality, the REBOL interpreter seems to run
about ten times slower than the Perl interpreter.

> Do you think we need yet another scripting language?

That's like asking if we need new pictures in the art gallery. You can't
prevent language designers from designing languages.

On the other hand, Perl has never been afraid of competition. :-)

> What are, in your opinion, the greatest advantages of Perl over REBOL?


Perl is about 10 times faster than REBOL at corresponding operations,
and REBOL is missing many of the corresponding operations.


Perl has been tested for 11 years now. REBOL core dumps every time I
quit on my Linux machine.


Perl already has all the stuff that they say they're going to add to
REBOL someday.

Paradigm neutrality

You can program Perl in the functional paradigm, but it's not forced on
you. Perl also lets you program in the procedural paradigm or the OO
paradigm. (REBOL claims to allow OO programming but there's no
inheritance, merely cloning.)


REBOL is relatively impoverished in quoting mechanisms. There aren't any
short-circuit logical operators in REBOL. Can't break out of multi-level
loops in REBOL. REBOl only has lexical scoping. Perl has both lexical
and dynamic.


Perl almost always has the right tool for the job. In REBOL you often
have to be more verbose. Perl's reference model is explicit and
straightforward. REBOL is full of implicit references into the middles
of lists that may be "owned" by other variables. Here's a quote from
REBOL's manual:

"The change, insert, remove, and clear functions directly affect the
series provided as the first argument. If you have other variables which
refer to the same series, after the operation they may no longer
reference the same value within the series."

Free and open source

REBOL's terms are very murky here.

Regular expressions

REBOL only has basic wildcard-style matches, ? and *.

Associative arrays

Perl's associative arrays are the same speed no matter how large they

System-dependent programming

Both Perl and REBOL allow system-independent programming, but REBOL
doesn't provide any system-dependent programming

Or vice versa?

The REBOL interpreter is more compact than Perl's, at least for the
barebones interpreter.

REBOL has continuations, meaning you can restart a function where it
left off, as a kind of co-routine. (In Perl these might be emulated with
closures or threads.)

Most of the other claims seem like hype to me:

I don't count REBOL's builtin types as an advantage because these can
easily be done in Perl with existing extension modules.

I don't think REBOL is any more English-like than any other dialecting
language such as, say, Tcl. (Or Perl, for that matter.) It claims to
have little punctuation, but in fact REBOL has its own set of funny
punctuation characters: "!" for types, "?" for booleans, "%" for
filenames, ":" to quote keywords, and such. The interpolation rules are
inconsistent: you use ^[foo] in strings, but :foo in paths.

Automatic case folding seems really retro these days when XML and
Unicode are moving in the opposite direction.

The fact of the matter is that almost every claim they make about REBOL
is also true of Perl. I don't think the reverse of that could be stated
with a straight face.

> Is there anything else that comes to your mind when you hear REBOL?

I think they shouldn't have given it a name that people will
intentionally mispronounce. :-)


| Fastnet Software Ltd | Perl in Active Server Pages |
| Perl Consultancy, Web Development | Database Design | XML |
| | Information Consolidation |

Nov 6, 1998, 3:00:00 AM11/6/98
I responded to Larry Wall's original post, but because this isn't
a perl group and because differing opinions were solicited, I'm
expanding on my post here.

There are a couple of factual errors in Larry Wall's post.

1. REBOL does have `short circuit' logical operators. They are
called `any?' and `all?'. REBOL also allows you to write your
own, should you not like these, and since REBOL has no keywords,
you could rename the existing non-short-circuit operators to
the short circuit versions.

2. It is easy to break out of multiple nested loops. The BREAK
function bound by a loop is a first-class function. Not only
can you invoke it from an arbitrarily nested context, you can
put it into an array, pass it as an argument, etc. It is far
more powerful than it looks.

3. Dynamic variable scoping is easily emulated using REBOL's
'SHIELD' function. It is used in the rebol initialization file in
several places for just this purpose.

4. REBOL's continuations are first-class, while it is true that many features
of first-class continuations can be emulated by threads or closures, not
all of them can.

Larry also makes some statements which are more matters of opinion than
of objective truths. For example, he notes that REBOL is not paradigm

REBOL is decidedly not paradigm neutral. We don't think that all paradigms
are of equal value.

He notes that REBOL has its own set of punctuation conventions. This is
a bit squishier, but the use of `!` and `?` in REBOL is simply a
syntactic convention and has no meaning to the interpreter. The only
punctuation that has a `built in' meaning is the use of ':' for assignment
and '[]' for grouping. All other punctuation is can be removed by the
user, and since REBOL has *no keywords* anyone who objects to punctuation
can remove it. Try removing the $ from PERL.

Larry is certainly correct that PERL, which has been around for 11 years
is more mature and stable than REBOL which has been around for a bit over
a month. I'll bet REBOL will be quite stable and mature 11 years from now.


-----------== Posted via Deja News, The Discussion Network ==---------- Search, Read, Discuss, or Start Your Own

Reply all
Reply to author
0 new messages