http://www.perlmonks.org?node_id=165830


in reply to Re: Favorite programming language, other than Perl:
in thread Favorite programming language, other than Perl:

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: 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.

/s

  • Comment on (OT -- ruby) Re: Re: Favorite programming language, other than Perl:

Replies are listed 'Best First'.
Re: (OT -- ruby) Re: Re: Favorite programming language, other than Perl:
by elusion (Curate) on May 11, 2002 at 02:33 UTC
    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 = Foo.new foo.bar { |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 : http://matt.diephouse.com

      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.

      /s

        Sorry, you missed my point. Maybe some code will help. :-)
        class Foo def a puts "Function 'a' called" end end foo = Foo.new (1..2).each do |i| if i == 2 print "a=", foo.a, "\n" else a = 1 print "a=", foo.a, "\n" end end
        which prints:
        Function 'a' called a=99 Function 'a' called a=99
        You see, functions are meant to belong to a class -- to be methods. Not that you can't declare functions that belong to the main class, but that's not what the design was for. So I guess if you're writing your code in a non-OO way, you could get stuck. But presumably your variable and function names will be better than 'a' :-).

        elusion : http://matt.diephouse.com