Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Re: Favorite programming language, other than Perl:

by cjf (Parson)
on May 06, 2002 at 14:17 UTC ( #164332=note: print w/replies, xml ) Need Help??

in reply to Favorite programming language, other than Perl:

Unfortunately I haven't tried them all... yet :) but my current favorite (other than Perl of course) is Ruby. Beautiful OO, and very easy to learn coming from a Perl background. While there's no Ruby Monks yet, there is a Ruby Garden and some good mailing lists.

For the interested, there's also an excellent book available online that will give you a good feel for the language.

  • Comment on Re: Favorite programming language, other than Perl:

Replies are listed 'Best First'.
Re (2): Favorite programming language, other than Perl:
by VSarkiss (Monsignor) on May 06, 2002 at 14:24 UTC

      They'll be able to run a Ruby-based system similar to the Everything Engine once the admin of this project gets off his lazy ass and releases some code ;).

(OT -- ruby) Re: Re: Favorite programming language, other than Perl:
by educated_foo (Vicar) on May 11, 2002 at 01:57 UTC
    I've glanced at Ruby before, probably after someone remarked on how clean it is. I just took another look this afternoon, and was once again found myself ready to abandon the attempt without doing anything useful, for the usual reasons:
    • Lack of documentation: If I write a method that takes a block, how do I then pass that block on to another method? The introductory guides give examples, but no general rules for how blocks work. After a bit of searching, I found the Pragmatic Programmers' guide which, although good, appears to be at least a year out of date. And I still haven't found the answer, though I'm not done searching. Then again, maybe I'm just slow or something.
    • Hackishness: The syntax is usually clean, friendly, DWIM, and the like. But when you look at some of the corner cases, it gets frightening. Take a look at this from the doc:
      When Ruby sees a name such as ``a'' in an expression, it needs to determine if it is a local variable reference or a call to a method with no parameters. To decide which is the case, Ruby uses a heuristic. As Ruby reads a source file, it keeps track of symbols that have been assigned to. It assumes that these symbols are variables. When it subsequently comes across a symbol that might be either a variable or a method call, it checks to see if it has seen a prior assignment to that symbol. If so, it treats the symbol as a variable; otherwise it treats it as a method call.
      So if I add a local variable "foo", it can silently mask subsequent calls to a function "foo" that I've been happily calling for a month? Yikes. Sure, Perl has some wierd things going on in places, but they mostly just show up in golf games.
    Don't get me wrong -- it's a fun, interesting language; if you squint a bit, it's clean at a higher level. But it still seems like a hack, not a solid foundation for software. I wouldn't trust it with my file system.


      I am one monk who feels strongly about Ruby -- strongly in favor. My main project right now (I'm a teenager -- no job) is in Ruby, so I've gotten to know if fairly well.

      As to the lack of documentation. It's true that there's not a lot, but what's out there is good stuff. And the Pragmatic Programmer's guide may be a year old, but it most certainly is not a year out of date. After all, languages don't change that much.

      It is possible to receive a block and then pass it on, it's just not introductory guide material. :-) Here's an example

      class Foo def initialize #no initialization needed for this class end def bar(&block) self.baz(&block) end def baz yield(3) end end foo = { |n| puts n } # prints "3\n"
      When you talk about adding a local variable that masks calls to an earlier added function of the same name, you forget something: Ruby is an object-oriented langauge. You're supposed to call functions on objects, which can't be confused with a variable. In a class definition, you call one of that class's methods like self.method or like method, which is merely a shortcut for the former. It calls that method with that instance from the class.

      This was also discussed at Ruby: An Abbot breaks silencewind. If you haven't checked it out, check it out. It's not better or worse than Perl -- it's different, and I love them both.

      elusion :

        Re passing blocks: thanks. Got that part working.

        But about the other, I probably need to clarify a bit. The example in the doc was the following:

        def a   print "Function 'a' called\n"   99 end for i in 1..2   if i == 2     print "a=", a, "\n"   else     a = 1     print "a=", a, "\n"   end end
        Which prints:
        a=1 Function 'a' called a=99
        Frankly, I think that's perverse, and object-orientation won't save you. What if, instead of printing, you'd tried to call "a.blah"? Presumably you'd get the same sort of bizarre results.


Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://164332]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2021-09-25 08:52 GMT
Find Nodes?
    Voting Booth?

    No recent polls found