From: Terrence Brannon Date: 2000-12-10T06:10:03+09:00 Subject: [ruby-talk:6986] Console use of Ruby/Perl compared to REBOL I dont know if there is a way to make the perfect language for everything. I really wish Ruby had been around before Perl. I love it's exception hierarchy. I like the regularity of method access. I like how easy it is to overload things. I like how easy it is to serialize things. Also, some very mind-numbing things in Perl such as server/client programs are available in Ruby already. Furthermore, the Ruby experts are not nearly as snobbish or as elitist as most of the major Perl experts --- just read comp.lang.perl.misc for a week or two if you don't believe me. Any, time to show how REBOL is easier than Ruby for console access: --- get a url: print read http://www.ruby-lang.org The Ruby interpretation of this is require 'net/http' h = Net::HTTP::new('www.ruby-lang.org', 80); resp, msg = h.get('/', nil) puts resp The Perl implementation is use LWP::Simple; print get 'http://www.ruby-lang.org'; or, with my Perl REBOL classes: REBOL::url->new('http://ruby-lang.org')->GET->PRINT; But, still, the Perl/Ruby code will never be intuitive to the non-technical architect. And so we have computer application architects unable to actually implement the top-level design of large complex systems because they find the non-english nature of Ruby and Perl unintuitive. Either that or the implementation is as non-English-like as the things above. Sending email in REBOL is also much simpler than Ruby or Perl: send princepawn@yahoo.com "how dare you criticize my favourite language!" And we are done. "Overload" the send command and we can couple together two CORBA architectures with a single line of REBOL. Does a language such as this have its shortcomings? Possibly. First, argument presentation can become confusing add to-number! read url 5 will add 5 to the number read from a url, but the 5 which relates to the word "add" is way down the list. This is a simple exmaple, but a more complex example, could hvbe the five many words down in the sentence. All of this gets very difficult when dealing with refinements and keeping track of arguments. Also, one cannot do keyword based argumentation easily in REBOL as one can do in Ruby/Perl. Second, REBOL is very global-oriented. It is very easy to build up a REBOL program by simply typing away at its console and saving what you do in little words and then calling up the words later when you need them. While this is great for non-mission-critical systems, I prefer the package orientation of Perl along with 'use strict'. So, we have some principles: 1- Whitespace is a natural separator of items. At least some items, commas are better for separating list items. However, REBOL opts for blocks over commas. Example: apples: [ powerbook ibook mac-classic ] mac-classic: [ age: 20 weight: 20] ibook [age: 1 weight: 1] print mac-classic/age Again, we see the ease of data specification in REBOL. Even for something as non-first-class as a catalog of apple computers, they were introduced without a bunch of stringification because of the power of new-word introduction. 2- "action-oriented" syntax is more English-like than "object-oriented" 3- REBOL is much easier to use from the shell due to it's English-like nature and the fact that common "things" (dates, times, URLs, email addresses) are first-class, meaning they do not require quoting or explicit typing because the core language expects them. Console use of Perl and Ruby suffer from the need to create objects within a domain while REBOL is always ready to accomodate entry into common domains. -- Terrence Brannon