Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

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.

    /s

      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

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (8)
As of 2015-07-08 02:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls